作者Casanoba (卡薩諾巴--卡巴)
看板C_and_CPP
標題[問題] 指標觀念
時間Thu Feb 12 21:40:05 2009
各位版友好,我寫了一個節點結構,
然後再設計一個函式用來新增這個節點,
程式碼如下,編譯會過,
但執行時會跳出錯誤,我試了一下,
發現如果用註解的語法,就可以順利執行,
但我完全不懂為什麼,只覺的是指標操作有誤,
所以想請問一下大家,
是我的觀念有那裡錯誤嗎?
先感謝大家的回答了!
typedef struct node{
char item;
} Node;
//void add(Node **, char);
void add(Node *, char);
int main(){
Node *nfPtr = NULL;
//add(&nfPtr, 'a');
add(nfPtr, 'a');
printf("item of node = %c\n", nfPtr->item);
system("PAUSE");
return 0;
}
//void add(Node **nPtr, char itemValue){
void add(Node *nPtr, char itemValue){
//if (*nPtr == NULL) {
if (nPtr == NULL) {
nPtr = malloc(sizeof(Node));
//*nPtr = malloc(sizeof(Node));
(*nPtr).item = itemValue;
//(*nPtr)->item = itemValue;
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.8.136
1F:→ COLDTURNIP:你宣告了指標,但沒給他分配空間去存值。 02/12 21:50
2F:→ ceon:應該是沒配置記憶體吧~ 02/12 21:50
3F:→ softwind:宣告一個 ptr 但是 這個ptr是要被更動的 so 你實際上是 02/12 21:57
4F:→ softwind:要將 &ptr 傳進去 ptr才會被改到 02/12 21:58
※ 編輯: Casanoba 來自: 122.116.8.136 (02/12 22:25)
5F:→ Casanoba:1、2樓的兩位,我漏加一行了,我配置記憶體空間也是會爆 02/12 22:26
6F:→ Casanoba:soft大,我有點不明白你的意思,我宣告指標指到那個節點 02/12 22:27
7F:→ Casanoba:結構,然後只改結構裡的item值,這樣是需要更動ptr嗎? 02/12 22:28
8F:推 QQ29:你想在 將nfPtr利用副程式malloc 可是你nPtr=malloc這行 02/12 22:34
9F:→ QQ29:你nPtr就指到別的地方了 主程式的nfPtr還是指在null阿 02/12 22:35
10F:→ QQ29:不然你可以寫void add( Node *& ,....)傳指標的ref進去 02/12 22:37
11F:→ Casanoba:喔喔,原來如此! 我有點了解了,謝謝Q大! 02/12 22:42
12F:→ Casanoba:所以我註解起來的宣告, void add(Node **,...) 就是要傳 02/12 22:45
13F:→ Casanoba:nfPtr的指標ref進去,因此才可以順利執行,是這樣嗎? XD 02/12 22:46
14F:推 QQ29:你**去指向的是 nfPtr本身的位址 跟傳ref意思應該一樣吧! 02/12 22:53
15F:→ QQ29:底層怎麼實作的我也不知道0.0 02/12 22:53
16F:→ Casanoba:恩恩,聽完你的說法,我也覺得就和傳ref一樣,再次感謝~ 02/12 23:06