【问题标题】:Sizeof(Array) Prints wrong value [duplicate]Sizeof(Array)打印错误的值[重复]
【发布时间】:2017-06-30 12:56:35
【问题描述】:

我已经初始化了一个大小为 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 什么?

【问题讨论】:

  • 使用printf("%zu\n" , sizeof(arr) / sizeof(arr[0]);%d 用于int
  • using namespace std; 不是有效的标准 C 代码。

标签: c arrays


【解决方案1】:

sizeof返回内存中数组的大小,而不是数组的长度。那么由于sizeof(int) 是 4 个字节并且你的数组有 10 个 int 值,它的大小是 40。

【讨论】:

  • 并注意 sizeof 返回一个 size_t,并且必须使用 "%zu" 格式打印以避免未定义的行为。
【解决方案2】:

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

int 这里32 bits = 4 bytes. 4*10 = 40。简单的数学运算

【讨论】:

    【解决方案3】:

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

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

    一旦你对学习感到兴奋

    sizeof(array)/sizeof(array[0]) == array_length
    

    请记住,一旦将数组传递给函数,它将衰减为指针,并且不再成立。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-11
        相关资源
        最近更新 更多