免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
打印 上一主题 下一主题

二重指针的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-19 23:53 |只看该作者
回复 10# zhangsuozhu


     ppi = &pi   
  
    *ppi = pi

两种写法编译都通过。第二种还是段错误。

论坛徽章:
0
12 [报告]
发表于 2010-08-20 00:12 |只看该作者
本帖最后由 zhangsuozhu 于 2010-08-20 00:14 编辑

第二种我没有说全完.

因为ppi没初始化.所以ppi指向的地址是一个不确定的值. 用*ppi = pi 故然会出错.

即:如果ppi = 0; 就相当于 *((int*)0) = pi;
所以必须让ppi指向的地址可以访问.
为了好理解可以这样:
  1. ppi = malloc(sizeof(void *));
  2. *ppi = pi;
  3. printf("%d\n\n", **ppi);
  4. free(ppi);
复制代码

论坛徽章:
0
13 [报告]
发表于 2010-08-20 00:46 |只看该作者
回复 12# zhangsuozhu


    {:3_194:}   还错啊。
  1. #include "stdio.h"
  2. main()
  3. {
  4.     int i;
  5.     int *pi=NULL;
  6.     int **ppi;

  7.     i = 1;
  8.     pi = &i;

  9.     ppi = malloc(sizof(void *));
  10.     *ppi = (pi);
  11.     free(ppi);

  12.     printf("i is %d\n\n",i);
  13.     printf("pi is %d\n\n",*pi);
  14.     printf("ppi is %d\n\n",**ppi);
  15. }
复制代码
[arch@sky cprog]$ cc pointer.c
pointer.c: 在函数‘main’中:
pointer.c:11:11: 警告:隐式声明与内建函数‘malloc’不兼容
pointer.c:11:24: 错误:expected expression before ‘void’
pointer.c:13:5: 警告:隐式声明与内建函数‘free’不兼容

论坛徽章:
0
14 [报告]
发表于 2010-08-20 01:08 |只看该作者
本帖最后由 churchmice 于 2010-08-20 01:15 编辑

回复 13# cu养猪小能手


没看懂你到底想干啥

至于那么麻烦么?

  1. #include "stdio.h"
  2. int main (int argc, char *argv[])
  3. {
  4.   int i;
  5.   int *pi = NULL;
  6.   int **ppi;
  7.   i = 1;
  8.   pi = &i;
  9.   ppi = π
  10.   printf ("i is %d\n\n", i);
  11.   printf ("pi is %d\n\n", *pi);
  12.   printf ("ppi is %d\n\n", **ppi);
  13.   return 0;
  14. }
复制代码
你的代码需要改成下面这样的

  1.     #include <stdio.h>
  2.     #include <string.h>
  3.     #include <stdlib.h>
  4.     int main(int argc,char *argv[])
  5.     {
  6.         int i;
  7.         int *pi=NULL;
  8.         int **ppi;
  9.    

  10.         i = 1;
  11.         pi = &i;
  12.   

  13.        ppi = (int **)malloc(sizeof(int **));
  14.        *ppi = pi;
  15.   

  16.        printf("i is %d\n\n",i);
  17.        printf("pi is %d\n\n",*pi);
  18.        printf("ppi is %d\n\n",**ppi);
  19.        free(ppi);
  20.        return 0;
  21.    }
复制代码

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
15 [报告]
发表于 2010-08-20 08:57 |只看该作者
汗楼上..{:3_194:}

论坛徽章:
0
16 [报告]
发表于 2010-08-20 08:57 |只看该作者
回复 13# cu养猪小能手


sizeof   你写成了 sizof

free早了!等使用完再free

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
17 [报告]
发表于 2010-08-20 08:58 |只看该作者
说错了...
是汗楼上..以为就一页的..{:3_199:}

论坛徽章:
0
18 [报告]
发表于 2010-08-20 09:04 |只看该作者
指针未分配地址就间接运算了,所以会出错。

论坛徽章:
0
19 [报告]
发表于 2010-08-20 09:08 |只看该作者
  1. int **pi;
  2. *pi = &pi;
复制代码
  1. int **ppi = &pi;
复制代码
是不同的。

  1. int **ppi = &pi;
  2. 等同于
  3. int **ppi;
  4. ppi=&pi;
复制代码

论坛徽章:
0
20 [报告]
发表于 2010-08-20 13:55 |只看该作者
zhangsuozhu (都市牧马人)

对你的回答,完全赞同和赞美!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP