请解释以下代码的输出。 我期望输出为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;
}
答案 0 :(得分:3)
当您将数组传递给函数时,它会衰减为指针,因此您实际上是在传递int *。 sizeof
将给出指针的大小,该大小可能因系统而异。在这种情况下,它可能返回8,因为您使用的是64位系统。
答案 1 :(得分:0)
如果要将普通的旧C数组传递给函数,则有两种可能。
您似乎想通过引用传递。但是您使用的语法错误。
请参阅:
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容器。