看板 C_and_CPP 關於我們 聯絡資訊
struct Element { int Value; Element* Next; }; cout << "請輸入 Element 的數目:\n"; cin >> Size; Element* pE = new Element[Size]; for (int i=0; i<(Size-1); i++) pE[i].Next = pE + i +1; pE[Size-1].Next = NULL; for (int i=0; i<(Size); i++) pE[i].Value = i*2; -------------------------------------------------------------------------- 請問一下*pE是ㄧ個指標 1.為什麼這裡可以用pE[i]這種陣列的方式來存取? 2.pE[i].Next這裡pE不是一個指標嗎? 不是應該用->Next這種方式存取Next的值嗎? 怎麼會變成用.Next這種方式? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.235.189.46 ※ 編輯: pujols05 來自: 36.235.189.46 (05/06 21:10)
diabloevagto:pE[i] = *(pE+i) 05/06 21:20
pujols05:*(pE+i).Next = pE + i +1;改成這樣的話 會有error 05/06 22:13
tjjh89017:(*(pE+i)).Next 試試 05/06 22:14
leiyan:(pE+i)->Next可以嗎? 05/06 22:19
pujols05:樓上2位的方式都沒有error 05/06 22:36
pujols05:但是對這個觀念還是很模糊,怎麼"."和"->"都可以使用 05/06 22:39
pujols05:pE不是指標型態嗎?存取的話不是只能用"->" 05/06 22:41
leiyan:pE[i]不是指標型態^^ 05/06 22:44
tjjh89017:這是 . 跟 * 優先的問題吧=口= 05/06 22:44
karaokstar:pE[i].Next 是pE[i]這個Element的成員 Element* Next 05/06 22:48
karaokstar:那寫成 pE[i].Next = 就代表你將一個值 assign給Next 05/06 22:48
karaokstar:pE[i].Next = pE + i + 1 // Next指到的位子是pE+i+1 05/06 22:51
karaokstar:至於->,是你->左手邊已經是個pointer才是這樣用 05/06 22:54
pujols05:謝謝樓上,再請問pE[i] = *(pE+i);如果指標可以改成這樣表 05/06 23:41
pujols05:示不會有問題嗎? 05/06 23:53
pujols05:像是int *b[10]={0};int *a=new int [10];a[1]=b[1]; 05/06 23:57
pujols05:就有錯,a和b不是都算是指標嗎? 05/06 23:57
karaokstar:int *b[10] //一個size為10的array, element為int ptr 05/07 00:16
karaokstar:int *a = new int [10] // a是pointer 指到一個array 05/07 00:17
karaokstar:b[1]是一個 int pointer, a[1]是int 05/07 00:18
karaokstar:你可能要再去看相關的資料, 感覺基本概念還搞不清楚 05/07 00:19
karaokstar:http://www.c-faq.com/aryptr/index.html 可以參考一下 05/07 00:20
pujols05:謝謝幾位的解答. 05/07 21:50
pujols05:剛看完K大介紹的網站,裡面有介紹指標不等於陣列,讓我比較 05/07 23:27
pujols05:疑惑的是pE既然是一個指標,為什麼用陣列的方式表達,他不 05/07 23:29
pujols05:會出錯 05/07 23:29
zetab:那個網站裡面沒說指標不能用陣列方式存取吧 05/08 20:50