#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu{
char *name,gender;
int score;
}STU;
void f(char *p)
{
/*p=(char*)malloc(10);*/
strcpy(p,"qian");
}
main()
{
STU a={NULL,'m',290};
a.name=(char *)malloc(10);
strcpy(a.name,"zhao");
f(a.name);
printf("%s\n",a.name);
}为什么加上注释掉的那句后,输出的结果就变了?malloc函数不就是分配了地址和空间吗?
3 回答
已采纳
angie
TA贡献56条经验 获得超8个赞
因为你没有完全理解指针的概念。当你去掉注释之后,p会获得一个新值,就不指向原来的那块空间,所以即便拷贝新值给p,a.name 还是 zhao;而如果没有malloc,p和a.name指向同一块空间,所以给p拷贝新值,就会覆盖原来的值,变成了qian
慕粉1239569501
TA贡献2条经验 获得超0个赞
因为函数的入参是只是一个指针的备份,一个新的指针,如果想改变指针的内容,需要入参设置成**p,内容写成*p= malloc() ;调用处传入指针的地址
- 3 回答
- 0 关注
- 1405 浏览
添加回答
举报
0/150
提交
取消