C - 理解结构成员与指针 (char *)

C - understanding struct members vs pointers (char *)

所以我开始学习C。到目前为止还很顺利,但我发现有些东西很难理解。 因为我是新手,所以我真的不知道该用什么搜索词,但我所有的搜索都没有找到有用的东西。

看下面的代码

#include <stdio.h>

typedef struct {
    char * name;
} person;

int main() {
    //this works
    person * myperson = malloc(sizeof(person));
    myperson->name = "John";
    myperson->name = "Doe";
    free(myperson);//works

    //this also works
    person myotherperson;
    myotherperson.name = "John";
    myotherperson.name = "Doe";//works

    //this throws a runtime error
    char * name = "John";
    *name = "Doe";

    return 0;
}

最初,我认为第一个示例工作正常,因为它是动态分配的,但后来,我尝试了第二个,它也工作正常。 我知道我需要使用 strcopy 让第三个例子工作。

我的问题是,为什么它在结构的情况下有效?

https://ideone.com/GIAgf8

是的,典型的初学者错误。

感谢@WhozCraig,我认为我做错了。我不应该取消引用指针。我还有很多东西要学。

感谢您的帮助!

//this works fine
char * name = "John";
name = "Doe";