如果不初始化指针会发生什么情况?

时间:2020-08-28 13:44:34

标签: c

#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会给出错误?

0 个答案:

没有答案