2011-03-30 39 views
1

可能重複:
Sizeof an array in the C programming language?爲什麼它給出錯誤的數組大小

我一直在這個時間不長,但似乎無法理解爲什麼這種情況正在發生。

void fun(char []); 

void fun(char a[]) 

{ 

    printf("Size is %d\n",sizeof(a)); 

} 

int main() 

{ 

    char arr[10] = { 0 }; 

    printf("Size is %d\n",sizeof(arr)); 

    fun(arr); 

    return 0; 

} 

爲什麼輸出:

尺寸是10

大小爲4

+1

確切的重複:http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language – razlebe 2011-03-30 10:51:55

回答

2

你還期望什麼?

它的因爲arrays當在函數中傳遞時被腐蝕成函數中的指針。

sizeof in fun()返回指針a的大小。閱讀關於Arrays and Pointers

a in fun()實際上是一個由值複製的指針。

您應該將數組大小作爲單獨的參數傳遞。

你應該試試這種方法:

#include <stdio.h> 
void fun(char []); 
void fun(char a[], int n) 
{ 
//  printf("Size is %d\n",sizeof(arr)); 
     printf("Size is %d\n",n); 
} 
int main() 
{ 
    char arr[10] = { 0 }; 
    const int truesize = sizeof(arr)/sizeof(arr[0]); // try to understand this statement what it does - sizeof returns size in bytes 
    printf("Size is %d\n",truesize); 
    fun(arr,truesize); // This is how you should call fun 
    return 0; 
} 
+0

這是爲什麼 - sizeof(arr)/ sizeof(arr [0] ) - 需要? – 2011-03-30 10:54:09

+0

製作「int」類型的數組,並查看代碼的大小。 – Sadique 2011-03-30 10:54:50

4

第一sizeof報告一個指針的大小,陣列的所述第二尺寸。

使用數組語法聲明的參數(void fun(char []))實際上是一個指針參數。 []只是語法糖。

0

的sizeof是一個操作符,它計算它的值在編譯時。 sizeof(char [])是指針的大小。