首页 > 其他 > 详细

二级指针理解

时间:2014-07-22 23:14:23      阅读:431      评论:0      收藏:0      [点我收藏+]

 1、先看一反例:

 

bubuko.com,布布扣
//目的:通过函数myMalloc改变指针p的值
#include<stdio.h>
#include<malloc.h>
void
myMalloc(char *s) //我想在函数中分配内存,再返回 { s=(char *) malloc(100); } void main() { char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p); }
bubuko.com,布布扣

以上例子中,p实际还是NULL,p的值没有改变,为什么?

答:我们的目的就是要指针p的值,因为p本身就是指针,传如myMalloc函数的实际上就是P的副本P1(副本改变,原来的P是不会改变),传入myMalloc函数的副本p1会改变了,p会改变吗?显然不会,跳出myMalloc函数后P1就被释放,P没有发生任何变化,所以P的值仍然是NULL。

 

2、请看下面这个可以改变P的值得程序:

bubuko.com,布布扣
//目的:通过函数myMalloc改变指针p的值
#include<malloc.h> #include<stdio.h> void myMalloc(char **s) //我想在函数中分配内存,再返回 { *s=(char *) malloc(100); printf("%x\n",*s); } void main() { char *p=NULL; myMalloc(&p); printf("%x\n",p); if(p) free(p); }
bubuko.com,布布扣

 

3、用(void**)就更具有一般性了,哈哈

bubuko.com,布布扣

//
目的:通过函数myMalloc改变指针p的值 #include<malloc.h> #include<stdio.h> void myMalloc(void **s) //我想在函数中分配内存,再返回 { *s=(char *) malloc(100); printf("%x\n",*s); } void main() { char *p=NULL; myMalloc((void **)&p); //这里的p实际还是NULL,p的值没有改变,为什么? printf("%x\n",p); if(p) free(p); }
bubuko.com,布布扣

二级指针理解

原文:http://www.cnblogs.com/yexuannan/p/3514488.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!