[問題] 地址問題

作者: anoymouse (沒有暱稱)   2014-11-23 22:37:31
請問為什麼變數的地址在mian不能對他做加減運算
可是丟到函式就可以做加減法運算?
例如 char b[10]="asdf";
b=b+1; //在函數可以做
作者: bibo9901 (function(){})()   2014-11-23 22:47:00
因為 array 不是 pointer, 而且是 not modifiable但是變成指標傳到函數之後, 那就是指標而不是陣列了
作者: flydragon198 (Richard)   2014-11-23 23:09:00
通常會叫address為位址
作者: anoymouse (沒有暱稱)   2014-11-23 23:21:00
瞭解 謝謝
作者: LPH66 (-6.2598534e+18f)   2014-11-24 01:26:00
事實上你有一個問題搞錯了: 陣列變數不能做的是對其賦值也就是這裡出問題的是 = 這個動作而這裡 + 這個動作編譯器會先幫你把陣列變數變成指標再做幾乎所有陣列變數能做的運算都會先這樣 decay 後才進行的所以你其實可以 char *p; p = b+1; 這樣是合法的p 在這之後會指向你的字串中 's' 這個 char 的所在位置
作者: anoymouse (沒有暱稱)   2014-11-25 02:29:00
恩 我本是想改變指標變數b的位址
作者: LPH66 (-6.2598534e+18f)   2014-11-25 04:14:00
b 本來就不是指標變數而是陣列變數, 所以你想要那樣的話就另外宣告一個指標變數來指就好

Links booklink

Contact Us: admin [ a t ] ucptt.com