在Starcounter.Metadata.IndexedColumn
中,数组元素被视为指针。所以表达式C
变为sizeof(arr)/sizeof(arr[0])
,导致sizeof(int *)/sizeof(int)
,然后以下程序提供输出的原因是1
。
12 11
答案 0 :(得分:2)
数组元素被视为指针
这不是真的。数组是 NOT 指针。但是当传递给函数时,它们会衰减到指向第一个元素的指针。 sizeof(array)
是整个数组占用的字节数。
答案 1 :(得分:0)
在C中,数组元素被视为指针。
错。传递给函数时,数组衰减到指针。但你没有任何函数将数组作为参数传递(完全不相关的东西)。
sizeof
运算符是例外情况之一。 sizeof
将为您提供内存中占用大小的数组。
答案 2 :(得分:0)
为了使Serhio's answer更清楚,重要的是要注意sizeof()
是一个运算符而不是Grzegorz之前所说的关于他的评论的函数。这意味着它的评估是在编译时进行的,但它意味着什么?
一旦以这种方式声明arr1
或arr2
,编译器就会在执行开始之前知道它的大小,而sizeof(arr1)
将转换为sizeof(char[12])
(它包括{{1}最后的char}和\0
到sizeof(arr2)
,结果是12和11。
由于它是在编译时生成的,编译器知道它们必须被sizeof(char[11])
运算符处理为数组而不是指针,这与动态分配的数组完全不同,它们被分配在执行时,sizeof()
将在正常的char指针大小上运行(取决于架构:它可能是32位系统上的4个字节或64位上的8个字节)。