就在今天,我还在考虑将多维数组传递给函数的不同方法。我知道的方法归纳为三个小功能:
void method_a(int m, int n, int (*ptr_arr)[n])
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
ptr_arr[i][j] = j + 1;
}
}
}
void method_c(int m, int n, int arr[][n])
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
arr[i][j] = j + 3;
}
}
}
void method_b(int m, int n, int *ptr_arr)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
*((ptr_arr + i * n) + j) = j + 2;
}
}
我还阅读了很多有关以下内容的声明method_a()
:
void method_d(int m, int n, int **ptr_arr)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
ptr_arr[i][j] = j + 1;
}
}
}
但是它似乎不适用于静态数组。这是否仅通过处理动态分配的数组malloc()
?如果它也适用于静态声明的数组,那么有人可以举个例子吗?
方法a,b和c是等效的,并且适用于二维数组(声明为int arr[x][y]
)。方法d适用于完全不同的对象:指向一维数组的指针的数组。
比迪数组:
a 00 a 01 a 02 a 03
a 10 a 11 a 12 a 13
a 20 a 21 a 22 a 23
指针数组
a0 a1 a2
| | |________ a20 a21 a22 a23
| |___________ a10 a11 a12 a13
|______________ a00 a01 a02 a03
在这种情况下,您将拥有一个指向不同行的指针数组,并且这些行在内存中不必连续
或者,如果您有一个二维数组,例如int arr[3][4];
,您可以使用它轻松构建一个指针数组:
int *ptarr[3];
...
for(i=0; i<3; i++) {
ptarr[i] = &(arr[i][0]);
}
然后可以将其与方法d一起使用
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句