C中的sizeof数组元素

时间:2016-09-14 12:40:03

标签: c arrays

Starcounter.Metadata.IndexedColumn中,数组元素被视为指针。所以表达式C变为sizeof(arr)/sizeof(arr[0]),导致sizeof(int *)/sizeof(int),然后以下程序提供输出的原因是1

12 11

3 个答案:

答案 0 :(得分:2)

  

数组元素被视为指针

这不是真的。数组是 NOT 指针。但是当传递给函数时,它们会衰减到指向第一个元素的指针。 sizeof(array)是整个数组占用的字节数。

答案 1 :(得分:0)

  

在C中,数组元素被视为指针。

错。传递给函数时,数组衰减到指针。但你没有任何函数将数组作为参数传递(完全不相关的东西)。

sizeof运算符是例外情况之一。 sizeof将为您提供内存中占用大小的数组。

答案 2 :(得分:0)

为了使Serhio's answer更清楚,重要的是要注意sizeof()是一个运算符而不是Grzegorz之前所说的关于他的评论的函数。这意味着它的评估是在编译时进行的,但它意味着什么?

一旦以这种方式声明arr1arr2,编译器就会在执行开始之前知道它的大小,而sizeof(arr1)将转换为sizeof(char[12])(它包括{{1}最后的char}和\0sizeof(arr2),结果是12和11。

由于它是在编译时生成的,编译器知道它们必须被sizeof(char[11])运算符处理为数组而不是指针,这与动态分配的数组完全不同,它们被分配在执行时,sizeof()将在正常的char指针大小上运行(取决于架构:它可能是32位系统上的4个字节或64位上的8个字节)。