[問題] 關於指標的宣告

看板C_and_CPP作者 (整個湖面只看得到101大樓)時間15年前 (2010/05/12 22:59), 編輯推噓9(9032)
留言41則, 10人參與, 最新討論串1/2 (看更多)
整篇文的 num都是整數型態 ptr是指標 1. int *ptr; ptr=# 2. int *ptr=num; 3. int *ptr=# 請問 以上哪個宣告方式才對呢 我的裡解是 理論上第三種才是錯的呀 為什麼會是對的呢 我還自作聰明(?)在書上標注說第三種是多打一個 & 因為黃色那行關係 我以為 ptr=# 和 *ptr=num; 是對等關係 &不是取位址嗎 *不是取值嗎(這是我個人的解讀) 所以我才會奇怪第三種是什麼東西?? 然後我又疑問 可以這樣寫嗎? int num; int ptr=# -- http://tinyurl.com/yclru5x 爸爸和女兒在喜宴中大打出手 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.177

05/12 23:00, , 1F
請問你的 num 是什麼東西?
05/12 23:00, 1F

05/12 23:00, , 2F
3的*跟1不一樣意思?
05/12 23:00, 2F

05/12 23:01, , 3F
int mum;
05/12 23:01, 3F

05/12 23:01, , 4F
我賭2錯
05/12 23:01, 4F

05/12 23:02, , 5F
2
05/12 23:02, 5F

05/12 23:03, , 6F
int * num <-這樣第三種才是錯的
05/12 23:03, 6F

05/12 23:08, , 7F
基本上要先看num是哪種型態, 在num型態上作點手腳也可以
05/12 23:08, 7F

05/12 23:08, , 8F
變成1錯2對; 如果num也是int, 那1和3是對的, 2才是錯的
05/12 23:08, 8F

05/12 23:10, , 9F
你的取址(address of)和取值(dereference)剛好寫反....
05/12 23:10, 9F

05/12 23:10, , 10F
&不是取值嗎 *不是取位址嗎 <== 兩個都不對 XDD
05/12 23:10, 10F

05/12 23:10, , 11F
囧 沒差啦 中文的表達 反正我懂意思
05/12 23:10, 11F
※ 編輯: Savate 來自: 163.25.118.177 (05/12 23:11) ※ 編輯: Savate 來自: 163.25.118.177 (05/12 23:12)

05/12 23:12, , 12F
那現在請問你, int *ptr; 的*是什麼?? 是取值嗎??
05/12 23:12, 12F

05/12 23:13, , 13F
取值 ptr=address
05/12 23:13, 13F

05/12 23:14, , 14F
錯了~_~
05/12 23:14, 14F

05/12 23:14, , 15F
其實 int *ptr 與 *ptr 兩種意思不一樣...(很容易搞混)
05/12 23:14, 15F

05/12 23:14, , 16F
書上沒特別提 >"<
05/12 23:14, 16F

05/12 23:15, , 17F
書上沒提的東西可多的呢 XDD
05/12 23:15, 17F

05/12 23:15, , 18F
建議去把語法語意看懂, 不要自己排列組合亂猜瞎拼湊XD
05/12 23:15, 18F

05/12 23:15, , 19F
這個再怎麼入門的書都應該會解釋吧?_?
05/12 23:15, 19F

05/12 23:15, , 20F
我覺得 * 的兩種意思真的很容易亂掉 搞懂了幫助會很大
05/12 23:15, 20F

05/12 23:16, , 21F
看什麼呀? 書嗎? 書這裡就沒特別提到呀 囧囧囧囧囧
05/12 23:16, 21F

05/12 23:16, , 22F
請問你的參考書是?? 如果是大家都知道的書也許有大大可
05/12 23:16, 22F

05/12 23:17, , 23F
書這部份沒特別提"這兩個不一樣喔" 所以我才誤以為它多打了
05/12 23:17, 23F

05/12 23:17, , 24F
以指點頁數:) 不然, 就得有人慢慢解釋了....XD
05/12 23:17, 24F

05/12 23:17, , 25F
洪維恩的書 :(
05/12 23:17, 25F

05/12 23:18, , 26F
書上第一種第三種都有打 但沒特別強調"不一樣喔 不一樣喔"
05/12 23:18, 26F

05/12 23:26, , 27F
簡單這樣看 int *ptr; 就是在告訴你 ptr 用 *取值出
05/12 23:26, 27F

05/12 23:27, , 28F
喔喔 @@
05/12 23:27, 28F

05/12 23:27, , 29F
int *ptr; 的意思是宣告 ptr為指向整數的指標
05/12 23:27, 29F

05/12 23:27, , 30F
來的東西是 int, 要把 *跟int合起來看也是可以
05/12 23:27, 30F

05/12 23:28, , 31F
ptr存的值是某個整數的位址
05/12 23:28, 31F

05/12 23:29, , 32F
int **ptr; 也可以解讀成, 對ptr兩次取值出來的型態是
05/12 23:29, 32F

05/12 23:29, , 33F
嗯嗯 謝謝 ^^
05/12 23:29, 33F

05/12 23:29, , 34F
int, 而 int* *ptr; 這樣來看就是說一次取值是int*
05/12 23:29, 34F

05/12 23:30, , 35F
XD l大推文好快
05/12 23:30, 35F

05/12 23:31, , 36F
不好意思斷到 ˊˋ
05/12 23:31, 36F

05/12 23:32, , 37F
總之謝謝了 ^^ 我以後就知道了
05/12 23:32, 37F

05/12 23:32, , 38F
沒關係 我也不小心斷到你的了 sorry
05/12 23:32, 38F

05/12 23:32, , 39F
哈 l大講解的好詳細呀
05/12 23:32, 39F

05/13 18:34, , 40F
3的方法是因為要告訴編譯器 你宣告了指標
05/13 18:34, 40F

05/13 22:09, , 41F
謝謝
05/13 22:09, 41F
文章代碼(AID): #1Bwi9BSD (C_and_CPP)
文章代碼(AID): #1Bwi9BSD (C_and_CPP)