分析一段代码。这是一个典型的指针的值传递错误。
void GetMemory(char *p,int num)
{
p = (char*)malloc(sizeof(char)*num);
}
void Test(void)
{
char *str = NULL;
GetMemory(str,100);
strcpy(str,"hello");
}
Test()运行过程是这样的:
1.声明一个指针str,它指向NULL。
2.开始运行GetMemory函数。首先做str和num的复本,实际上为_str,_num,它们的值与str,num相同,即_str=str;_num=num。子函数中对参数的操作实际上都是对其复本进行操作。然后malloc返回的指针值赋给了_str,而str的值不变。函数结束时,_str,_num被销毁。
3.执行strcpy时,str仍然指向NULL,运行出错。
说明:指针也是普通数据,要分清楚它的值,地址,以及名称。