簡體   English   中英

為什么整數數組大小(數組)的返回值只是元素數的4倍?

[英]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。

floatint類型數組的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM