2013-03-26 63 views
0
void func(char *s[]){ 
    printf("s: %d\n", sizeof(s)); 
} 

void caller(){ 
    char *a[2]; 
    for(int i = 0; i < 2; i++){ 
     a[i] = (char *)malloc(50 * sizeof(char)); 
    } 
    strcpy(a[0], "something"); 
    strcpy(a[1], "somethingelse"); 

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

    func(a); 
} 

此輸出C字符串數組的sizeof()改變

a: 16 
s: 8 

爲什麼在caller()func()sizeof()不同的輸出?另外,func有可能通過sizeof獲得數組中char *的數量嗎?

+1

歡迎使用C中的字符串/數組。它正在腐蝕指針。 – 2013-03-26 17:58:43

回答

0

一個是兩個字符指針的數組。另一個是指向數組指針的指針。它們的大小不一樣。

+0

是否真的有必要回答這個問題,而不是投票結束?這已經被回答了很多次,應該關閉。 – 2013-03-26 18:02:32

+0

我想嘗試回答它。在嘗試回答問題之前,我沒有興趣檢查是否有問題。我在這裏通過測試我的理解來學習。如果這對你很煩,我很抱歉。 – John 2013-03-26 18:05:42

0

在C/C++中,Array decays into a pointer .char * s []是一個指針,指針的大小始終是固定的4或8(取決於機器)。

+0

其實沒有。在這種情況下,它正在衰減到一個指針。 – 2013-03-26 18:04:33

+0

@ RichardJ.RossIII:正確地腐蝕指針,我忘了確切的名字。我更新了我的答案。謝謝! – 2013-03-26 18:06:22