关于指针的值传递错误

来源:互联网 发布:gap淘宝旗舰店 编辑:程序博客网 时间:2024/04/29 23:08

分析一段代码。这是一个典型的指针的值传递错误。

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,运行出错。


说明:指针也是普通数据,要分清楚它的值,地址,以及名称。

原创粉丝点击