[問題] 地址問題

看板C_and_CPP (C/C++)作者 (沒有暱稱)時間11年前 (2014/11/23 22:37), 11年前編輯推噓2(2011)
留言13則, 4人參與, 最新討論串1/1
請問為什麼變數的地址在mian不能對他做加減運算 可是丟到函式就可以做加減法運算? 例如 char b[10]="asdf"; b=b+1; //在函數可以做 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.29.253 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1416753455.A.FBC.html ※ 編輯: anoymouse (114.44.29.253), 11/23/2014 22:40:47

11/23 22:47, , 1F
因為 array 不是 pointer, 而且是 not modifiable
11/23 22:47, 1F

11/23 22:48, , 2F
但是變成指標傳到函數之後, 那就是指標而不是陣列了
11/23 22:48, 2F

11/23 23:09, , 3F
通常會叫address為位址
11/23 23:09, 3F

11/23 23:21, , 4F
瞭解 謝謝
11/23 23:21, 4F

11/24 01:26, , 5F
事實上你有一個問題搞錯了: 陣列變數不能做的是對其賦值
11/24 01:26, 5F

11/24 01:27, , 6F
也就是這裡出問題的是 = 這個動作
11/24 01:27, 6F

11/24 01:27, , 7F
而這裡 + 這個動作編譯器會先幫你把陣列變數變成指標再做
11/24 01:27, 7F

11/24 01:28, , 8F
幾乎所有陣列變數能做的運算都會先這樣 decay 後才進行的
11/24 01:28, 8F

11/24 01:29, , 9F
所以你其實可以 char *p; p = b+1; 這樣是合法的
11/24 01:29, 9F

11/24 01:29, , 10F
p 在這之後會指向你的字串中 's' 這個 char 的所在位置
11/24 01:29, 10F

11/25 02:29, , 11F
恩 我本是想改變指標變數b的位址
11/25 02:29, 11F

11/25 04:14, , 12F
b 本來就不是指標變數而是陣列變數, 所以你想要那樣的話
11/25 04:14, 12F

11/25 04:14, , 13F
就另外宣告一個指標變數來指就好
11/25 04:14, 13F
文章代碼(AID): #1KSV4l-y (C_and_CPP)
文章代碼(AID): #1KSV4l-y (C_and_CPP)