Gau*_*hra 4 c pointers sizeof multidimensional-array
我知道当我们sizeof在数组名称上使用operator时,它以字节为单位给出数组的总大小.例如
int main(int argc, const char * argv[]) {
    int a[][5] = {
        {1,2,3,4,5},
        {10,20,30,40,50},
        {100,200,300,400,500}
    };
    int n=sizeof(a);
    printf("%d\n",n);
}
它给出了数组的60输出15 elements.但是当我写作
int n=sizeof(*a);
它给出20的输出是第一行的大小,而它是行*a的0th元素的基地址0th,它的类型是指向整数的指针.并a指向第一行本身.为什么会这样?
*a是第0行a,该行是5的数组int.
在大多数表达式中,数组会自动转换为指向其第一个元素的指针.因此,当您*a在诸如的语句中使用时int *x = *a;,*a会转换为指向其第一个元素的指针.这导致指向int,可以分配给x.
但是,当数组是运算sizeof符,一元运算&符或运算符的_Alignof_操作数时,它不会转换为指向其第一个元素的指针.此外,一个数组,它是一个字符串被用来初始化一个数组不转换为指针(所以,在char foo[] = "abc";,"abc"被用作阵列来初始化foo;它不转换为指针).