为什么即使我给出全尺寸,数组的大小只是一个指针?这也在腐烂吗?
#include <iostream>
using namespace std;
void function(char* arr[1][2]){
cout << sizeof(arr); // 4
}
int main() {
char* params2d[1][2] = { {"hello", "world"} };
cout << sizeof(params2d); // 8
function(params2d);
return 0;
}
答案 0 :(得分:3)
所有函数声明
void function(char* arr[1][2]);
void function(char* arr[][2]);
void function(char* (*arr)[2]);
是一样的。在多维数组的情况下,可以省略第一维。那么,你是否写作
void function(char* arr[1][2]);
或
void function(char* arr[10][2]);
编译器将其转换为
void function(char* (*arr)[2]);
答案 1 :(得分:1)
是的,它在腐烂。类型为“X
的数组”的函数参数只是“指向X
的指针”的语法糖。除非参数的类型是“对数组的引用”,否则用作该参数的参数的数组总是转换为指针。
答案 2 :(得分:1)
要通过引用传递数组,您应该使用:
void function(char* (&arr)[1][2])
目前您的声明类似于:
void function(char* (*arr)[2]);