【问题标题】:Passing Multidimensional Arrays to a function in C将多维数组传递给 C 中的函数
【发布时间】:2014-11-19 21:16:35
【问题描述】:

我正在尝试修改多维数组。这是我的功能代码-

void rot90(int n,char **a)
{
  int i,j;
  int b[n][n];

  for(i=n-1;i>=0;i--)
  {
    for(j=0;j<n;j++)
    {
      a[n-1-i][j]=b[j][i];
    }
  }
  for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      a[i][j]=b[i][j];
    }  
  }
}

在我的主要功能中,我将其称为 - A 是一个二维数组 nxn。 rot90(n,A);

在编译时显示以下错误 - 警告:从不兼容的指针类型传递“rot90”的参数 2 [默认启用] 注意:预期为“char **”,但参数类型为“char (*)[10]”

什么是正确的方法? 谢谢。

【问题讨论】:

  • 你能告诉我们A的定义吗?
  • 我想这只是一个重现问题的例子,但仍然:你在这里使用b uninitialized。至少memset 将其归零,或者添加评论或其他内容,以避免关于 UB 的 cmets :-)
  • 您正在传递指向函数的指针,但需要指向指针的指针
  • 试试rot90(n,(char **)A);
  • void rot90(int n,char **a) 更改为void rot90(int n,char a[][10])

标签: c function pointers multidimensional-array


【解决方案1】:

如果A 是一个NxN 数组,并且您使用的是VLA(从您的sn-p 看起来像),那么原型需要是任一

 void rot90( int n, char (*a)[n] )

 void rot90( int n, char a[][n] )

 void rot90( int n, char a[n][n] )

后两种形式的解释与第一种相同; a 是指向n 元素数组char 的指针。

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 2014-03-16
    • 2011-09-27
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多