传递给函数的2d数组的大小

时间:2019-07-03 01:45:12

标签: c++

请解释以下代码的输出。 我期望输出为16,但输出为8。

#include <iostream>
using namespace std;

 void xy(int arr[2][2]){
   cout << sizeof(arr);
 }

int main() {


int arr[2][2] = {{1,2},{3,4}};
xy(arr);
  return 0;
}

2 个答案:

答案 0 :(得分:3)

当您将数组传递给函数时,它会衰减为指针,因此您实际上是在传递int *。 sizeof将给出指针的大小,该大小可能因系统而异。在这种情况下,它可能返回8,因为您使用的是64位系统。

答案 1 :(得分:0)

如果要将普通的旧C数组传递给函数,则有两种可能。

  1. 通过引用传递
  2. 通过指针传递

您似乎想通过引用传递。但是您使用的语法错误。

请参阅:

void function1(int(&m)[3][4])   // For passing array by reference
{}
void function2(int(*m)[3][4])   // For passing array by pointer
{}

int main()
{
    int matrix[3][4]; // Define 2 dimensional array

    function1(matrix);  // Call by reference
    function2(&matrix); // Call via pointer 
    return 0;
}

传递给函数的是指向int数组的衰减指针。

只需更正语法即可使用。

其他提示:

请勿在C ++中使用纯C样式的数组。决不。请使用STL容器。