![](/img/trans.png)
[英]Calculating number of elements in an array in C sizeof(a)/sizeof(a+1)?
[英]sizeof array elements in C
在C
, 數組元素被視為指針 。 因此,表達式sizeof(arr)/sizeof(arr[0])
變為sizeof(int *)/sizeof(int)
,結果為1
那么以下程序給出輸出的原因是12 11
。
#include <stdio.h>
int main()
{
int n1, n2;
char arr1[] = "Hello World";
char arr2[] = {'H','e','l','l','o',' ','W','o','r','l','d'};
n1 = sizeof(arr1)/sizeof(arr1[0]);
n2 = sizeof(arr2)/sizeof(arr2[0]);
printf("n1 = %d\nn2 = %d\n", n1, n2);
return 0;
}
數組元素被視為指針
這不是真的。 數組不是指針。 但是當它們傳遞給函數時,它們會衰減到指向第一個元素的指針。 sizeof(array)
是整個數組占用的字節數。
在C語言中,數組元素被視為指針。
錯誤的。 數組傳遞給function時會衰減到指針。 但是您沒有任何將數組作為參數傳遞給的函數( 完全無關的東西 )。
sizeof
運算符是例外之一。 sizeof
將給您size數組在內存中的占用。
為了使Serhio的答案更清楚,請務必注意sizeof()
是運算符,而不是Grzegorz之前在評論中所說的函數。 這意味着它的評估是在編譯時進行的,但這意味着什么呢?
以這種方式聲明arr1
或arr2
后,編譯器將在執行開始之前知道其大小,然后sizeof(arr1)
將轉換為sizeof(char[12])
(末尾包含\\0
char)和sizeof(arr2)
轉換為sizeof(char[11])
,結果為12和11。
由於它是在編譯時進行的,因此編譯器知道必須由sizeof()
運算符將它們作為數組而不是指針進行處理,這與在執行時分配的動態分配數組完全不同,而sizeof()
將在正常的char指針大小(取決於體系結構:在32位系統上可能是4個字節,在64位系統上可能是8個字節)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.