看板 C_and_CPP 關於我們 聯絡資訊
下面這個網頁有說明"陣列的名稱"並不是一個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
zlw:array就是一塊連續的記憶體,需要取值時就用mov指令,指定記憶 07/14 15:21
zlw:體位址後放到暫存器。運作機制就是這樣。 07/14 15:22
zlw:這是指x86指令集,MIPS大概是用LW指令吧 07/14 15:23
rebellian:正確的說法(書本的寫法)是說array name不是variable 07/14 15:55
rebellian:主要的差別是pointer的值可以改變 但array name不行 07/14 16:00
zlw:如果 int n; 的 n 是變數,那 int arr[2]; 的 arr 就也是變數 07/14 16:06
zlw:只不過是資料型態不同的變數 07/14 16:07
softwind:sizeof 是編譯期關鍵字啦 run alloc的 看不出來 07/15 00:55
rebellian:說他不是變數的原因是因為你可以 n++ 但不能 arr++ 07/15 04:08
Ebergies:C/C++ array 不是變數, JAVA/C# 之類的才是 07/15 09:31
zlw:不算嗎...大概是我觀念有錯 07/15 09:40
UNARYvvv:那句話在 K&R II 裡面 5.3 Pointers and Arrays 07/15 20:20
UNARYvvv:".. an array name is not a variable .." 07/15 20:21
UNARYvvv:不過也可以看看 2.4 Declarations 07/15 20:34
UNARYvvv:"A declaration specifies a type, and contains a list 07/15 20:35
UNARYvvv:of one or more variables of that type, .." 之後舉的例 07/15 20:36
UNARYvvv:子是有 array 的 07/15 20:36
zlw:探求本義的話,如果 arr 代表的僅只是所在處記憶體位址的別名 07/15 20:48
zlw:那當然不是一個變數。而如果把 arr 跟 n 一樣視為某塊記憶體 07/15 20:49
zlw:可以存取而非唯讀的記憶體,那這時候就算變數了吧 07/15 20:50