#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Name *NameFunc(struct Name *);
struct Name
{
char *Fname;
char *Lname;
};
int main()
{
struct Name *name1, *name2;
name1 = (struct Name *)malloc(sizeof(struct Name));
//name2 = (struct Name *)malloc(sizeof(*name2));
name1->Fname = (char *)malloc(50 * sizeof(char));
name1->Lname = (char *)malloc(100 * sizeof(char));
strcpy(name1->Fname, "Akhil");
strcpy(name1->Lname, "Sambaraju");
printf("%s %s\n", name1->Fname, name1->Lname);
name2 = NameFunc(name2);
printf("%s %s", name2->Fname, name2->Lname);
return 0;
}
struct Name *NameFunc(struct Name *name)
{
name->Fname = "Akhil";
name->Lname = "Sambaraju 2.0";
return name;
}
输出:Akhil Sambaraju Akhil Sambaraju 2.0
即使我没有为“ name2”分配内存,此代码如何正常运行? 经过一番评论之后,我发现函数调用NameFunc()与它无关。但是'name1'有。如果我不使用malloc将内存分配给name1,它不会在cmd上打印出任何内容。 当我将name2初始化为NULL时,它只打印出“ Akhil Sambaraju”,即name1。 为什么要给name1分配内存,为什么还要给name2分配内存(未初始化时)? PS:为什么将struct Name中的fname和lname初始化为NULL会给出错误?