具有维度的数组参数

时间:2014-06-13 12:46:10

标签: c++ arrays pointers sizeof

为什么即使我给出全尺寸,数组的大小只是一个指针?这也在腐烂吗?

#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;
}

3 个答案:

答案 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]);