Re: [問題] 怪問題 array's address ?

看板C_and_CPP (C/C++)作者 (哈哈哈哈哈哈哈哈哈哈哈)時間16年前 (2009/07/14 15:11), 編輯推噓10(10010)
留言20則, 5人參與, 最新討論串2/2 (看更多)
下面這個網頁有說明"陣列的名稱"並不是一個pointer, 但使用上與const pointer很類似 http://www.daniweb.com/forums/thread171080.html# 網頁中提了兩個觀點說明"陣列名稱"並不是一個pointer 第一個就是原po所提到的問題 第二個就是第16544篇提到的問題 了解到"陣列名稱"不是pointer後, 應該就很好解釋上述兩個情況了 #### 分隔線 #### 不過我還有些地方不是很了解, 所謂的array type也算是種資料型態嗎? 像是int, double, char等等, "佔有記憶體, 並存放一些資料" 根據sizeof的結果, array type的大小就是整個陣列的大小 存放的數值就是第一個元素的位址 但是這樣的想法根本就不可能 因為根本不需要整個陣列的記憶體去存一個位址 而且陣列的記憶體有其他資料要存, 哪裡還會有位子可以存一個位址 一整個混亂@@ 有人可以說明一下array type運作的機制嗎 ? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.209.20.225

07/14 15:21, , 1F
array就是一塊連續的記憶體,需要取值時就用mov指令,指定記憶
07/14 15:21, 1F

07/14 15:22, , 2F
體位址後放到暫存器。運作機制就是這樣。
07/14 15:22, 2F

07/14 15:23, , 3F
這是指x86指令集,MIPS大概是用LW指令吧
07/14 15:23, 3F

07/14 15:55, , 4F
正確的說法(書本的寫法)是說array name不是variable
07/14 15:55, 4F

07/14 16:00, , 5F
主要的差別是pointer的值可以改變 但array name不行
07/14 16:00, 5F

07/14 16:06, , 6F
如果 int n; 的 n 是變數,那 int arr[2]; 的 arr 就也是變數
07/14 16:06, 6F

07/14 16:07, , 7F
只不過是資料型態不同的變數
07/14 16:07, 7F

07/15 00:55, , 8F
sizeof 是編譯期關鍵字啦 run alloc的 看不出來
07/15 00:55, 8F

07/15 04:08, , 9F
說他不是變數的原因是因為你可以 n++ 但不能 arr++
07/15 04:08, 9F

07/15 09:31, , 10F
C/C++ array 不是變數, JAVA/C# 之類的才是
07/15 09:31, 10F

07/15 09:40, , 11F
不算嗎...大概是我觀念有錯
07/15 09:40, 11F

07/15 20:20, , 12F
那句話在 K&R II 裡面 5.3 Pointers and Arrays
07/15 20:20, 12F

07/15 20:21, , 13F
".. an array name is not a variable .."
07/15 20:21, 13F

07/15 20:34, , 14F
不過也可以看看 2.4 Declarations
07/15 20:34, 14F

07/15 20:35, , 15F
"A declaration specifies a type, and contains a list
07/15 20:35, 15F

07/15 20:36, , 16F
of one or more variables of that type, .." 之後舉的例
07/15 20:36, 16F

07/15 20:36, , 17F
子是有 array 的
07/15 20:36, 17F

07/15 20:48, , 18F
探求本義的話,如果 arr 代表的僅只是所在處記憶體位址的別名
07/15 20:48, 18F

07/15 20:49, , 19F
那當然不是一個變數。而如果把 arr 跟 n 一樣視為某塊記憶體
07/15 20:49, 19F

07/15 20:50, , 20F
可以存取而非唯讀的記憶體,那這時候就算變數了吧
07/15 20:50, 20F
文章代碼(AID): #1AN2-8S1 (C_and_CPP)
文章代碼(AID): #1AN2-8S1 (C_and_CPP)