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

看板C_and_CPP作者 (恥ずかしい ね...(>///<))時間9年前 (2015/05/13 21:44), 9年前編輯推噓3(3026)
留言29則, 8人參與, 最新討論串5/5 (看更多)
※ 引述《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); 強制指定輸入的陣列長度? 不然到底什麼時候會用到啦~?╮( ̄▽ ̄")╭ -- 當教授在講臺上C++的時候,我的臉比佳佳還要沮喪... 講正經的... C++是一個被過度設計的程式語言,完全遭透了! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.91.124 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431524646.A.73F.html ※ 編輯: Hazukashiine (140.113.91.124), 05/13/2015 21:48:55

05/13 22:00, , 1F
我之前的推文就是跟這篇原Po一樣的想法,我就是不知道&b
05/13 22:00, 1F

05/13 22:00, , 2F
到底有啥用??XD
05/13 22:00, 2F

05/13 22:35, , 3F
硬要這麼說的話, C 裡面沒有的東西可多了...
05/13 22:35, 3F

05/13 22:35, , 4F
"沒用" 的東西...
05/13 22:35, 4F

05/13 22:38, , 5F
讓陣列能取址是必要的存在. 因為你有多維陣列. 之前推文有
05/13 22:38, 5F

05/13 22:44, , 6F
更廣泛的說是為了讓 aggregate type 更有用. 細節有空再寫
05/13 22:44, 6F

05/13 22:55, , 7F
嗯嗯,其實我本身開發很少用C/C++啦,是有學過,所以也是好
05/13 22:55, 7F

05/13 22:55, , 8F
奇,所以才會這樣問XD
05/13 22:55, 8F

05/13 22:57, , 9F
array of fixed-dimension vectors...
05/13 22:57, 9F

05/13 22:57, , 10F
或 array of pipe fd pairs,很少見嗎
05/13 22:57, 10F

05/13 22:59, , 11F
往前翻發現lvalue rvalue是你提的耶
05/13 22:59, 11F
所以? 開宗明義就說這一篇的重點不是放在lvalue跟rvalue啊 ┐(─_─)┌ ※ 編輯: Hazukashiine (140.113.91.124), 05/13/2015 23:12:44

05/14 00:45, , 12F
#define p(n) printf(#n"=%p, size=%d\n",(n),sizeof(*(n)))
05/14 00:45, 12F

05/14 00:49, , 13F
char a[32]; 用 p(n) 看 a &a &a[0] a+1 &a+1 &a[0]+1 &a[1]
05/14 00:49, 13F

05/14 01:02, , 14F
&a 有什麼用? 我想是語意問題吧. 請認明 a 是 &a[0] 的簡化.
05/14 01:02, 14F

05/14 01:04, , 15F
所以如果 func() 是想傳整個 array, 寫 func(&a ...) 較好,
05/14 01:04, 15F

05/14 01:04, , 16F
咦 &a 是 &a[0] 的簡化@@?
05/14 01:04, 16F

05/14 01:07, , 17F
但若只是傳入第一個的指標, 那就 func(&a[0]) 或 func(a) 吧
05/14 01:07, 17F

05/14 01:08, , 18F
當然, 傳入第n個的指標就是 func(&a[n]) 或 func(a+n)
05/14 01:08, 18F

05/14 01:17, , 19F
suhorng: a 不是 &a. 我指的是位址計算的意義上.
05/14 01:17, 19F

05/14 01:20, , 20F
不然 sizeof(a) 當然不等於 sizeof(&a[0]) 啊.
05/14 01:20, 20F

05/14 10:13, , 21F
可能只是表示「到此為止」 否則遲早會有人問&&a或&&&a
05/14 10:13, 21F

05/14 10:14, , 22F
是什麼 煩都煩死了 規定&a=a便不會有這種「天外有天」
05/14 10:14, 22F

05/14 10:15, , 23F
的問題 天外還是天 再來沒有了
05/14 10:15, 23F

05/14 12:34, , 24F
有點煩,會用就好
05/14 12:34, 24F

05/14 12:39, , 25F
推「天外還是天」 XD
05/14 12:39, 25F

05/14 22:03, , 26F
Asimov說他碰過個教派篤信天圓地方那套 扁平的地面底下
05/14 22:03, 26F

05/14 22:04, , 27F
是隻大烏龜 Asimov就故意問對方烏龜底下是什麼 對方立
05/14 22:04, 27F

05/14 22:07, , 28F
刻回答是另一隻龜 龜下還有龜 龜龜相連
05/14 22:07, 28F

05/14 22:09, , 29F
想想看 每次講到指標都落入標標相連 豈不煩死人
05/14 22:09, 29F
文章代碼(AID): #1LKrKcS_ (C_and_CPP)
文章代碼(AID): #1LKrKcS_ (C_and_CPP)