从不兼容的指针类型传递 'functionName' 的参数 1

passing argument 1 of 'functionName' from incopatible pointer type

我正在尝试创建一个函数来更改我的二维数组并将更改保存到它

代码运行正常,但出现了关于指针的警告,我的 C 语言基础知识还不知道如何绕过它

#include <stdio.h>
int size = 0;

void functionName(char (*tab)[size][size]) {
    for(int i = 0; i < size; i++) {
        for(int j = 0; j < size; j++) {
            (*tab)[i][j] = (*tab)[i][j]-'0';
        }
    }
}

int main() {
    scanf("%d", &size);
    char tab[size][size];
    for(int i = 0; i < size; i++) {
        for(int j = 0; j < size; j++) {
            scanf("%c", &tab[i][j]);
        }
    }
    functionName(tab);

    return 0;
}

错误发生是因为 char tab[][] 在作为参数传递时衰减为 char (*)[],这与 functionName 期望的类型不匹配。要解决不一致问题,可以:

  • 通过调用 functionName(&tab)tab 作为 char (*)[][] 传递;

  • 或者,将 functionName 的参数类型更改为 void functionName(char tab[size][size]),并修复函数内的代码以使用 tab[i][j] 而不是 (*tab)[i][j] .

问题已由

回答

具有可变长度数组的 C99 或 select 更高版本的 C,使用:

void functionName(int size, char tab[size][size]) {
  ...
}

并用

打电话
functionName(size, tab);

也怀疑OP的scanf("%c", &tab[i][j]);应该改成scanf(" %c", &tab[i][j]);(添加space)