求助,有关C结构体变量的引用的基础问题

#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函数不就是分配了地址和空间吗?

hitman
浏览 1415回答 3
3回答

angie

因为你没有完全理解指针的概念。当你去掉注释之后,p会获得一个新值,就不指向原来的那块空间,所以即便拷贝新值给p,a.name 还是 zhao;而如果没有malloc,p和a.name指向同一块空间,所以给p拷贝新值,就会覆盖原来的值,变成了qian

慕粉1239569501

因为函数的入参是只是一个指针的备份,一个新的指针,如果想改变指针的内容,需要入参设置成**p,内容写成*p= malloc() ;调用处传入指针的地址
打开App,查看更多内容
随时随地看视频慕课网APP