从不兼容的指针类型传递 '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)
我正在尝试创建一个函数来更改我的二维数组并将更改保存到它
代码运行正常,但出现了关于指针的警告,我的 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)