我正在尝试编写一个函数来填充函数调用中未定义大小的二维数组,但 vsc 抱怨指针类型不兼容
#include <stdio.h>
#include <string.h>
#define ROW1 20
#define ROWNUM1 20
#define ROW2 20
#define ROWNUM2 20
int max( int x, int y){
if(x > y) return x;
else return y;
}
int getMatrix(int (*matrix)[]){
return 1; //don't mind this, a placeholder
}
int main(){
int matrix1[ROWNUM1][ROW1], matrix2[ROWNUM2][ROW2];
int rowLen1, rowLen2;
printf("%d", getMatrix(matrix1));
rowLen2 = getMatrix(matrix2);
return 0;
}
我在 vsc 问题选项卡中得到了这个,但代码运行时没有任何抱怨 “从不兼容的指针类型[-Win兼容指针类型]传递'getMatrix'的参数1”。感谢您提供有关提前解决此问题的所有建议
这是MSVC的缺陷。 MSVC 不是一个合格的 C 编译器。
int (*matrix)[]
声明 matrix
是指向未知数量 int
的数组的指针。我怀疑 MSVC 可能在内部将其处理为零元素数组。
在
getMatrix(matrix1)
中,数组 matrix1
会自动转换为指向其第一个元素的指针,因此函数的参数是指向 ROW1
int
数组的指针。
根据 C 标准,指向未知数量
int
的数组的指针和指向 ROW1
int
的数组的指针是兼容类型,因此编译器应该接受这一点。