【问题标题】:How to pass in function a multidimensional char array in C?如何在C中传递一个多维char数组?
【发布时间】:2014-12-17 05:47:02
【问题描述】:

这是我的代码,它不起作用。 当我像这样传递 char 数组时,它会产生这些错误grid[r][c]

[Error] use of parameter 'r' outside function body

[Error] use of parameter 'c' outside function body

当我像grid[][c]这样传递char数组时会产生这些错误

[Error] use of parameter 'c' outside function body

当我像grid[][]这样传递char数组时会产生这些错误

[Error] declaration of 'grid' as multidimensional array must have bounds for all dimensions except the first 

当我像这样grid[1][2] 传递它时,它运行得非常好,即只传递一个整数。0

我被困在这里,我不知道该做什么或不做什么??

如何解决这个问题??帮帮我!!!

提前致谢!

void dfs(int r, int c, int pacman_r, int pacman_c, int food_r, int food_c, char grid[r][c]) {
    //logic here
}
int main(void) {
    int r, c;
    int pacman_r, pacman_c;
    int food_r, food_c;
    scanf( "%d %d", &pacman_r, &pacman_c);
    scanf( "%d %d", &food_r, &food_c);
    scanf( "%d %d", &r, &c);
    char grid[r][c];
    for( int i=0; i<r; i++) {
        scanf("%s[^\\n]%*c", grid[i]);
    }
    dfs( r, c, pacman_r, pacman_c, food_r, food_c, grid);
    return 0;
}

【问题讨论】:

  • 重要的是要认识到,无论您的函数签名是什么样的,您实际上都无法将数组传递给函数。在这种情况下,数组将衰减为指向其第一个元素的指针。
  • 另外,你用的是什么编译器?
  • 除了指针还有其他解决方案吗??
  • @IskarJarak 我正在使用 Dev C++ 5.4
  • 它会起作用。(应该被视为char * 而不是二维数组。)同样scanf("%s[^\\n]%*c", grid[i]); 错误。

标签: c arrays function char


【解决方案1】:

您应该将参数作为 char* 传递,然后将其作为指向数组扁平实例的指针来使用

void fn(char* grid, int c){
    printf("%c", (grid+n*c)[m]);
}

这将打印 `grid[n][m]

【讨论】:

  • 抱歉,忘记传入了,c 只是你要传入你自己的函数中对应于列的变量
  • 但是还是不行。它没有打印任何东西。我的 char 数组的维度是 r 和 c,我将其写为 (grid+r*c)[c]。我是对还是错??
  • 那我该怎么办?你能给我解释一下吗??
  • 我是这样写的 printf("%c", (grid+i*j)[c])。 i = 我要访问的行数,j = 我要访问的列数,c = 总列数。它仍然无法正常工作并打印垃圾。
  • 好的,谢谢终于成功了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 1970-01-01
  • 2015-03-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多