c - 将多维静态数组传递给函数

标签 c arrays multidimensional-array

我需要一点建议。将静态、多维数组(这里我有 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]'|。这是否意味着在这种情况下只有 fun2fun3 有效?

最佳答案

一个是指针指向一个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/

相关文章:

c - 在有序对结构数组上实现二进制搜索

c - 当线程释放它的资源

java - 在 Java 中声明 BigDecimal 数组的初始值

c - 在递归函数中修改二维数组,C

java - 将 JSON 数组[array[String]] 转换为 Java 数组

字符常量的C编码

Cs50 的问题集 4 - 无滤波器 - 反射函数

java - If 语句中的 Android 字符串数组

javascript - 如何为未知 JSON 数据自动添加制表符列设置

php - 根据一列中的值对行数组进行自然排序