[問題] 指標的型別

看板C_and_CPP作者 (severus)時間14年前 (2010/06/09 20:59), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
typedef struct node { int key; struct node *next; }Node; Node a; 我如果要用一個指標變數存&a 要宣告int *ptr還是Node *ptr ? 假如再宣告另一個變數存指向a的指標 是用 int **ptr2; ptr2 = &ptr; 還是 Node **ptr2; ptr2 = &ptr; 簡單來說 我搞不太懂要如何判斷指標要用哪一種型別 謝謝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.48.111

06/09 21:01, , 1F
原則上, a是Node, 要存a的address就用Node *ptr去存.
06/09 21:01, 1F

06/09 21:01, , 2F
試試看吧 沒有錯誤訊息與警告訊息(可能)就是對的
06/09 21:01, 2F

06/09 21:01, , 3F
實際上你要強轉型成int*或由其他int*轉型回Node*也可以,
06/09 21:01, 3F

06/09 21:02, , 4F
第二個問題, 意思應該是ptr再存一份, 所以應該用
06/09 21:02, 4F

06/09 21:03, , 5F
Node *ptr2 = ptr; 就行了; 除非你是要存ptr的address
06/09 21:03, 5F

06/09 21:04, , 6F
才是用Node **ptr2=&ptr; 指標要用什麼型別, 你就想你要
06/09 21:04, 6F

06/09 21:04, , 7F
指到什麼樣的型別, 就用哪種型別的指標.
06/09 21:04, 7F

06/09 21:04, , 8F
當然看應用並不是不能轉型, 只是看起來初學這樣就行了.
06/09 21:04, 8F

06/09 21:07, , 9F
謝謝樓上的指教 我懂了
06/09 21:07, 9F

06/09 21:42, , 10F
重要的是指標會告訴編譯器一個元素佔的大小
06/09 21:42, 10F

06/09 21:43, , 11F
所以你 ptr+1 的時候會決定 +1 到底要跳多遠
06/09 21:43, 11F

06/09 21:44, , 12F
轉換型別,可能就會改掉原本該跳的長度
06/09 21:44, 12F
文章代碼(AID): #1C3v1023 (C_and_CPP)