c - 在C中通过引用传递多维数组

标签 c pointers

#include <stdio.h>

void f(int *app[][20]) {
    int i, j;
    for (i =0; i< 20; i++){
        for (j=0; j<20; j++){
            *app[i][j] = i;
        }
    }
}

int main() {
  int app[20][20];
  int i, j;
  f(&app);
    for (i =0; i< 20; i++){
        for (j=0; j<20; j++){
            printf("i %d, j%d  val= %d\n", i, j, app[i][j]);
        }
    }

  return 0;
}

我到底做错了什么?我没有收到任何错误,但是存在段错误,我不知道为什么。
te.c:15:5: warning: passing argument 1 of ‘f’ from incompatible pointer type
   f(&app);
     ^
te.c:3:6: note: expected ‘int * (*)[20]’ but argument is of type ‘int (*)[20][20]’
 void f(int *app[][20]) {

最佳答案

void f(int *app[][20]) { /* a 2d array of pointers to int */

应该
void f(int app[][20]) { /* a pointer to an array of 20 int's */

或者
void f(int (*app)[20]) { /* a pointer to an array of 20 int's */
*app[i][j] = i;

应该
app[i][j] = i; /* you don't need to dereference */
f(&app);

应该
f(app);

关于c - 在C中通过引用传递多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940928/

相关文章:

c - 指针类型数组与指针不兼容

c - 如何停止自己的广播消息?

c++ - 如何在 C++ 中将 localtime_s 与指针一起使用

c - 指针到指针类型转换的目的是什么?

c - 在C中添加到链表的尾部

c - 如何在C程序中打印堆栈的内容?

c++ - 抗锯齿算法?

c - 寻找一组字符

c - C 语言的图案打印

c++ - 是指针数组吗?