[英]Why is the return value of integer array size(array) just 4 times the number of elements?
例如,如果我執行以下操作,
int array[5] = {1, 2, 3, 4, 5};
printf("%d", sizeof(array));
它將返回4倍的元素數,即5 = 20。
但是我的問題是數組不要求指針嗎?(地址)如果是這樣,由於指針的大小為8個字節,為什么不將其包含在大小中?
但我的問題是數組不要求指針嗎?(地址)
不。 數組只是對象序列-在這種情況下,是5個int
序列:
+–––+
array: | 1 | array[0]
+–––+
| 2 | array[1]
+–––+
| 3 | array[2]
+–––+
| 4 | array[3]
+–––+
| 5 | array[4]
+–––+
沒有為任何指針留出空間- 表達式 array
將被轉換(“衰減”)為指針表達式,以便其求值為第一個元素的地址(除非它是sizeof
或unary &
運算符的操作數) 。
如果是這樣,由於指針的大小為8個字節,為什么不將其包含在大小中?
不要假設指針具有特定的大小-仍在使用16位和32位系統,並且指向不同類型的指針不必具有相同的大小和表示形式。 全世界不是
VAX
x86-64。
以float和int類型數組的array [5]為例,它顯示的大小為20 (而float的大小為4而int為2似乎都具有相同的空間,不知道為什么),因此假設32指針大小為4的位機,然后數組為4 * 5 = 20,但對於char類型的數組,這一次在同一台機器上顯示大小為5 (即這次未乘以4),指針大小必須為1根據輸出。 對於雙精度類型數組,它顯示的大小為40 (5 * 8),因此指針大小必須為8
這不僅是32位的4位或64位的8位,而且對於不同的數據類型也有所不同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.