读书人

请问一段代码!

发布时间: 2012-09-28 00:03:35 作者: rapoo

请教一段代码!!!

C/C++ code
void GetMemory(char *p){        p=(char *)malloc(100);}void Test(void){    char *str=NULL;    GetMemory(str);    strcpy(str,"hello world\n");    printf(str);}

像上面这样运行Test会有错误。
而如果是下面这样运行Test2则正确:
C/C++ code
void GetMemory2(char **p,int num){    *p=(char *)malloc(num);}void Test2(void){    char *str=NULL;    GetMemory2(&str,100);    strcpy(str,"hello world!\n");    printf(str);}

指针作为参数是可以改变实参的吗?为什么第一个不可以?第二个就可以呢?求解释

[解决办法]
第一个是把指针str的值传给了形参p,函数只给p开辟了空间而没有给str开辟空间,而第二个是把指针str的地址传给了p,所以给str开辟了空间
[解决办法]
因为指针作为形参传进函数的时候,函数会另外开辟一个空间来保存这个值
而这个值的地址和你传进来的参数的地址是不一样的
所以你在第一个函数里面直接用这个变量保存malloc返回的指针
那么就是说这个malloc的空间仅仅是保存在了函数自动开辟的空间的那个值里面
而没有真正改变到原来传入的参数里面去

读书人网 >C语言

热点推荐