请问一段代码!
请教一段代码!!!C/C++ codevoid GetMemory(char *p){p(char *)malloc(100)}void Test(void){char *strN
请教一段代码!!!
C/C++ codevoid 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++ codevoid 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的空间仅仅是保存在了函数自动开辟的空间的那个值里面
而没有真正改变到原来传入的参数里面去