【问题标题】:Why do we have to use int a[][10] when passing 2d arrays to functions?为什么我们在将二维数组传递给函数时必须使用 int a[][10] ?
【发布时间】:2022-01-05 00:39:22
【问题描述】:

我想将二维数组传递给函数,我知道该怎么做

int function(int a[][10])

问题是,我不喜欢处理我不懂的东西,所以我想了解为什么我们必须使用“int a[][10]”而不是“int a[10][10]” .

【问题讨论】:

  • 是的,它在行动中的衰败。答案说明了一切,如果“a”在代码中提出了一些概念,我也经常使用解决方案,我创建一个具有有意义名称的结构并将数组添加为成员。这样,您还可以将函数限制为仅适用于抽象而不是类型。
  • 与传递一维数组时必须使用int function(int a[]) 的原因相同。

标签: c++ multidimensional-array


【解决方案1】:

首先函数参数a 是一个指向大小为10 的数组的指针,该数组的元素类型为int。也就是说,a 参数不是数组,正如您可能想的那样。

这被称为类型衰减,引用如下:

除非它是 sizeof 运算符或一元 & 运算符的操作数,或者是用于初始化数组的字符串字面量,否则类型为 ''array of type'' 的表达式将转换为类型为 ' 的表达式'pointer to type'' 指向数组对象的初始元素,不是左值。

你问

为什么我们必须使用“int a[][10]”而不是“int a[10][10]”。

使用int a[][10] 或int a[10][10] 无关紧要,因为在这两种情况下,参数a 都是指向具有int 类型元素的大小为10 的数组的指针。

如果您想传递int 元素的一维数组,您可以使用版本 1 中如下所示的模板:

版本 1:通过引用传递一维数组


#include <iostream>

template<int N>
int function(int (&a)[N])// a is a reference to a 1D array of size N having elements of type int
{
    return 5; //return something according to your needs
}

int main()
{
    int arr[3] = {0};
    function(arr);
    return 0;
}

版本 2:通过引用传递二维数组


#include <iostream>

template<int N, int M>
int function(int (&a)[N][M])// a is a reference to a 2D array
{
    return 5; //return something according to your needs
}

int main()
{
    int arr[10][10];
    function(arr);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多