【问题标题】:Array parameter with dimension带维度的数组参数
【发布时间】:2014-06-13 12:46:10
【问题描述】:

即使我给出完整的维度,为什么数组的大小只是指针之一?这也腐烂了?

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

【问题讨论】:

  • 就是这样。 int n[42]int n[]int* n 是函数参数时相同。数组参数衰减为指针。

标签: c++ arrays pointers sizeof


【解决方案1】:

所有函数声明

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

【讨论】:

    【解决方案2】:

    是的,它正在腐烂。 “X 的数组”类型的函数参数只是“指向X 的指针”的语法糖。除非参数的类型是“对数组的引用”,否则用作该参数的参数的数组总是转换为指针。

    【讨论】:

      【解决方案3】:

      要通过引用传递数组,您应该使用:

      void function(char* (&arr)[1][2])
      

      目前您的声明类似于:

      void function(char* (*arr)[2]);
      

      【讨论】:

      • 这不是回答问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多