Re: [問題] 對陣列名稱取址

作者: Hazukashiine (私は幸せです)   2015-05-13 21:44:01
※ 引述《lalaboom (lalaboom)》之銘言:
: 之前我的認知陣列名稱是一個常數指標,非指標常數喔,
: 1. 請問這個敘述對嗎?
: 現在有陣列 int b[2];
: int a[2][3];
: 2. 請問為什麼 b 跟 &b 兩個address會一樣呢?
: 我可以理解 a, a[0], &a[0][0] 這3個一樣,
: 但是type不同,還是說這個認知也是錯的XD
: 3. 陣列在記憶體裏面除了宣告出來的連續空間,
: 陣列名稱是否會有另外像宣告指標一樣有一個變數空間嗎?
: 關於2之前好像有看到說&b = b 是定義好的 (compiler ? )
: 關於以上問題可能敘述的不是很好,
: 有需要我再補充,
: 懇請各位解惑 ~ 3Q
先不要管 l-value 跟 r-value 的問題,
這些真的都不重要,重要的是生成後的機械碼。
不過本人從來沒去認真想過 &b 真正存在的價值,
是為了使程式更加安全嗎?像是:
宣告:char b[16];
void func(char (*arr)[16]);
呼叫:func(&b);
強制指定輸入的陣列長度?
不然到底什麼時候會用到啦~?╮( ̄▽ ̄")╭
作者: wenyonba (射後不理很XX啊!!!!)   2015-05-13 22:00:00
我之前的推文就是跟這篇原Po一樣的想法,我就是不知道&b到底有啥用??XD
作者: Feis (永遠睡不著 @@)   2015-05-13 22:35:00
硬要這麼說的話, C 裡面沒有的東西可多了..."沒用" 的東西...讓陣列能取址是必要的存在. 因為你有多維陣列. 之前推文有更廣泛的說是為了讓 aggregate type 更有用. 細節有空再寫
作者: wenyonba (射後不理很XX啊!!!!)   2015-05-13 22:55:00
嗯嗯,其實我本身開發很少用C/C++啦,是有學過,所以也是好奇,所以才會這樣問XD
作者: CaptainH (Cannon)   2015-05-13 22:57:00
array of fixed-dimension vectors...或 array of pipe fd pairs,很少見嗎往前翻發現lvalue rvalue是你提的耶
作者: yvb   2015-05-14 00:45:00
#define p(n) printf(#n"=%p, size=%d\n",(n),sizeof(*(n)))char a[32]; 用 p(n) 看 a &a &a[0] a+1 &a+1 &a[0]+1 &a[1]&a 有什麼用? 我想是語意問題吧. 請認明 a 是 &a[0] 的簡化.所以如果 func() 是想傳整個 array, 寫 func(&a ...) 較好,
作者: suhorng ( )   2015-05-14 01:04:00
咦 &a 是 &a[0] 的簡化@@?
作者: yvb   2015-05-14 01:07:00
但若只是傳入第一個的指標, 那就 func(&a[0]) 或 func(a) 吧當然, 傳入第n個的指標就是 func(&a[n]) 或 func(a+n)suhorng: a 不是 &a. 我指的是位址計算的意義上.不然 sizeof(a) 當然不等於 sizeof(&a[0]) 啊.
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-05-14 10:13:00
可能只是表示「到此為止」 否則遲早會有人問&&a或&&&a是什麼 煩都煩死了 規定&a=a便不會有這種「天外有天」的問題 天外還是天 再來沒有了
作者: TobyH4cker (Toby (我要當好人))   2015-05-14 12:34:00
有點煩,會用就好
作者: uranusjr (←這人是超級笨蛋)   2015-05-14 12:39:00
推「天外還是天」 XD
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-05-14 22:03:00
Asimov說他碰過個教派篤信天圓地方那套 扁平的地面底下是隻大烏龜 Asimov就故意問對方烏龜底下是什麼 對方立刻回答是另一隻龜 龜下還有龜 龜龜相連想想看 每次講到指標都落入標標相連 豈不煩死人

Links booklink

Contact Us: admin [ a t ] ucptt.com