二级指针理解

 1、先看一反例:

 

//目的:通过函数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); }

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

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

 

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

//目的:通过函数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); }

 

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


//
目的:通过函数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); }
posted @ 2014-01-10 21:16  yexuannan  阅读(1700)  评论(0编辑  收藏  举报