为什么阵列大小变得如此之大?

时间:2014-04-04 06:29:49

标签: c++ multidimensional-array sizeof

我一直在努力弄清楚如何将2D数组传递给函数,我想我已经弄明白了。我现在的问题是由于某种原因,这个数组(见下文)从25增加到100,我无法弄清楚原因。我无法确定它在哪里发生错误。

#include <iostream>

void testFunc(int (&n)[5][5]) {
  n[0][0] = 5;
}

int main() {
  int arr3[5][5];
  // The array is initialized here with all values equaling 8.
  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
      arr3[i][j] = 8;
    }
  }

  testFunc(arr3);     // Function is called here changing [0][0] to the value 5.
  for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
      std::cout << arr3[i][j] << ' ';
    }
    std::cout << '\n' << std::endl;
  }
  std::cout << sizeof(arr3) << std::endl;
  return 0;
}

当我尝试用for-loopi < sizeof(arr3)时,我的大小为100.不确定原因。它在哪里获得了这个价值?

3 个答案:

答案 0 :(得分:1)

您的数组大小为5*5 = 25int占用4个字节。所以它变成了100

答案 1 :(得分:1)

sizeof不是元素的数量。它是char中对象的大小,即大多数现代系统的字节数。

您的系统具有32位(4 char /字节)int s。这给你5 * 5 * 4 = 100。

答案 2 :(得分:0)

数据大小也取决于CPU寄存器的大小。在32位机器中,int的大小为4.但是在早期的16位机器中,int的大小为2。