Sizeof(Array)打印错误的值

时间:2017-02-12 14:31:14

标签: c arrays

我初始化了一个大小为10的数组,但在打印时,sizof数组显示为40。代码如下,

#include <iostream>

using namespace std;

int main() {
    int  arr[10] =  {2,4,5,6,7,8,9,6,90};

        printf("%d \n" , sizeof(arr));

}

输出:

/Users/venkat/Library/Caches/CLion2016.1/cmake/generated/InsertionSort-e101b03d/e101b03d/Debug/InsertionSort
40 

Process finished with exit code 0

C在这里打印40个什么?

4 个答案:

答案 0 :(得分:6)

sizeof返回内存中数组的大小,而不是数组的长度。然后,因为sizeof(int)是4个字节而你的数组有10个int值,所以它的大小是40。

答案 1 :(得分:1)

因为sizeof是内置运算符,它对表达式的类型起作用。对于数组(而不是指针),它将打印sizeof(array_element_type) * array_length

在您的系统上,sizeof(int)必须为4。

一旦你对学习

感到兴奋
sizeof(array)/sizeof(array[0]) == array_length

请记住,一旦你将数组传递给一个函数,它就会衰减为一个指针而且不再存在。

答案 2 :(得分:1)

您的数组包含10个整数。 10 * sizeof(int)

int是32 bits = 4 bytes. 4 * 10 = 40.简单数学

答案 3 :(得分:1)

您需要将sizeof(arr)除以一个元素的大小: sizeof(arr)/ sizeof(arr [0])

这是因为sizeof(arr)显示了参数的字节数,即sizeof(int)* array dimention