我想了解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