C字符串数组sizeof()发生了变化

时间:2013-03-26 17:57:34

标签: c string

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);
}

此输出

a: 16
s: 8

为什么sizeof()caller()的{​​{1}}输出有所不同?此外,func()是否可以通过func获取数组中char *的数量?

2 个答案:

答案 0 :(得分:0)

一个是两个字符指针的数组。另一个是指向指针数组的指针。它们的大小不一样。

答案 1 :(得分:0)

在C / C ++中,Array decays into a pointer。char * s []是一个指针,指针的大小总是固定为4或8(取决于机器)。