簡體   English   中英

C中的sizeof數組元素

[英]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之前在評論中所說的函數。 這意味着它的評估是在編譯時進行的,但這意味着什么呢?

以這種方式聲明arr1arr2后,編譯器將在執行開始之前知道其大小,然后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.

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