繁体   English   中英

将多维数组传递给C ++中的函数

[英]Passing multidimensional arrays to functions in C++

我目前正在阅读有关C ++的教程,其中指出以下内容:

当传递更高维度的数组时,只有第一个维度可以打开,而在编译过程中必须知道其他维度。

我对此需要进一步的解释。 当将一维数组( int a[] )传递给某些函数f()该数组会衰减为指针int* a 我假设上面的语句暗示一个2D数组,例如int a[][]衰减为int *a[]或者说只有第一维可以动态分配(这是无稽之谈)。 具体来说,“只有第一维可以打开”是什么意思? 这些是我能提出的仅有的两种解释。

作者说如果数组是int a[5][10]并且您想将该数组传递给某个函数,那么在函数声明中,您将接受该数组的参数编写为int x[][10]甚至该参数,即int x[][10]衰减为int (*x)[10]

无论如何,传递2D数组的好方法是:

template<typename T, int first,int second>
void someFunction(T (&array)[first][second])
{....}

我假设上面的语句暗示一个二维数组,例如int a [] []衰减为int * a []

int a[x][y]衰减为int (*a)[y]a是指向y ints数组的指针,这与int *a[y]不同,后者意味着ay int指针数组。

例如,如果您有一个二维数组

int a[M][N];

然后在表达式中使用,例如在参数表达式中使用,如果相应的函数参数不是引用,则将其隐式转换为指向其第一个元素int ( * )[N]指针。

所以例如你可以写

int ( *p )[N] = a;

您可以通过以下方式想象它。

如果你有一个数组

T a[M};

然后它会在表达式中隐式转换,很少有例外指向它的第一个元素T *指针。

如果您有一个二维数组

int a[M][N];

您可以用以下方式表示它

typedef int T[N];
T a[M];

所以指针看起来像

T *p = a;

其中类型T是一维数组int [N]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM