我想了解C编程中的指针和字符数组。 我有一个名为球员结构定义为这样:C解引用指针中的分段错误
typedef struct player{
char* name;
float ppm;
} player;
而且在主要我有以下几点:
int main()
{
player* head = (player*) malloc(sizeof(player));
char* meName = &(head->name);
(*head).name = "potato";
(*head).name = "Paul";
(*head).ppg =7.6;
//printf("player is named %s\n", *meName); //First print
printf("player is named %s\n", meName); //second print
printf("player is named %s\n", (*head).name); //third print
return 0;
}
为什么我的第一次印刷导致段错误,为什么做我的其他两个印记输出如下:
player is named [email protected]
player is named Paul
如果我没有记错meName
应指向,然后由使用另一个指针改变的存储地址到相同的内存地址。事实上,如果我将其打印在第二张照片中,则会显示该地址。当我清楚地将变量设置为指向刚刚被修改的内存空间时,为什么取消引用会导致segFault
?为什么它不会更改为Paul
?为什么它会首先抛出段错误?
此外,我会很感激解释箭头 - >与*用于取消引用指针。
[不投出malloc(和朋友)](http://stackoverflow.com/q/605845)的结果。另外,'(* head).name'等价于更好的'head-> name'。这个表达式中的括号是混乱的:'&(head-> name)'。无论如何,'meName'具有'char *'类型,而不是'char **'。我的建议:用完整的警告编译你的代码,并全部留意。 – Deduplicator 2014-09-27 15:53:48