我需要一点建议。将静态、多维数组(这里我有 3 维,我猜 4 维它会类比)传递给函数的所有这 3 种方式是否正确?
代码如下:
#include <stdio.h>
void fun1(int ***tab, int n, int m, int p)
{
int i,j,k;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
for(k=0; k<p; k++)
{
printf("tab[%d][%d][%d] = %d\n", i, j, k, tab[i][j][k]);
}
printf("\n");
}
printf("\n");
}
}
void fun2(int tab[2][3][2])
{
int i,j,k;
for(i=0; i<2; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<2; k++)
{
printf("tab[%d][%d][%d] = %d\n", i, j, k, tab[i][j][k]);
}
printf("\n");
}
printf("\n");
}
}
void fun3(int tab[][3][2])
{
int i,j,k;
for(i=0; i<2; i++)
{
for(j=0; j<3; j++)
{
for(k=0; k<2; k++)
{
printf("tab[%d][%d][%d] = %d\n", i, j, k, tab[i][j][k]);
}
printf("\n");
}
printf("\n");
}
}
int main()
{
int tab[2][3][2] =
{
{{0, 1}, {2, 3}, {3, 4}},
{{5, 6}, {7, 8}, {9, 10}}
};
fun1(tab,2,3,2);
printf("--------------------------\n");
fun2(tab);
printf("--------------------------\n");
fun3(tab);
return 0;
}
fun1
似乎有问题,但无法真正理解它的含义:expected 'int ***' but argument is of type 'int (*)[ 3][2]'|
。这是否意味着在这种情况下只有 fun2
和 fun3
有效?
最佳答案
一个是指针指向一个intint ***
的指针,另一个是指向3维和2维数组的指针int(*)[3 ][2]
。
这些类型不兼容,它们的内存布局也不相同。数组在内存中是连续的,而指向指针的指针则不是。
如果您希望以运行时已知尺寸的动态方式使用第一个函数,则使用附加参数声明它:
void fun1( int n, int m, int p , int a[n][m][p] )...
关于c - 将多维静态数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26896985/