为什么我们需要在堆内存中放置结构字段?

Why do we need to place structure fields in the heap memory?

考虑以下程序

typedef struct
{
    char *name;
    int id;
}Student;

int main()
{
    Student std1,std2;  //case 1
    std1.name =(char*) malloc(7);
    strcpy(std1.name, "Daniel");
    puts(std1.name);

    char name[7]={'D','a','n','i','e','l','[=10=]'}; //case 2
    std2.name = name;
    puts(std2.name);
}

案例1把student的名字放在heap内存里,而case 2把student2的名字放在sack内存里,如果我没理解错的话

我的问题是,为什么我要将名称(或任何其他结构字段)放在堆内存中?

如果情况 2 适合您,请务必使用它 -- 堆栈内存分配速度更快,并且会自动释放。

当内存太大而无法在堆栈上(例如典型系统上的兆字节),或者它需要比分配它的函数更长寿时,您需要情况 1。这通常发生在分配 struct本身在堆上。例如:

Student *new_student() {
    Student *p = malloc(sizeof(Student));
    p->id = 0;
    p->name = malloc(7);
    strcpy(p->name, "Daniel");
    return p;
}

在此示例中,堆栈分配不会削减它。