代码分析2

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:13:38
void GetMemory(char *p)
{
p=(char *)malloc(100);
}

void Test(void)
{
char *str=NULL;
GetMemory(str);
strcpy(str,"hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?

会直接崩掉的啊。因为GetMemory(str); 把str作为实参传入,GetMemory函数自己生成一个副本p存放str的值,也就是NULL,然后把malloc得到的地址赋给p,对str没有影响。函数返回后,str仍然是NULL。应该这样改进:
void GetMemory(char **p)
{
*p=(char *)malloc(100);
}

调用时用GetMemory(&str);

hello world\0

这也要调用malloc还分配了100的空间? 完全是在秀malloc()嘛.

*p传的是指针.str是作为首地址的.

会报错,因为str为NULL。
调用GetMemory()函数并不能改变str的值,因为C中的传参都是值传递的。

出错。

p=(char *)malloc(100);只会给形参p分配内存,而test函数里的str指针不会作任何改变,所以strcpy(str,"hello world")这句出错,因为 str没有指向可用内存。