2013-03-26 67 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