使用函数填充二维数组时如何修复不兼容的指针类型

问题描述 投票:0回答:1

我正在尝试编写一个函数来填充函数调用中未定义大小的二维数组,但 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”。感谢您提供有关提前解决此问题的所有建议

arrays c multidimensional-array
1个回答
0
投票

这是MSVC的缺陷。 MSVC 不是一个合格的 C 编译器。

int (*matrix)[]
声明
matrix
是指向未知数量
int
的数组的指针。我怀疑 MSVC 可能在内部将其处理为零元素数组。

getMatrix(matrix1)
中,数组
matrix1
会自动转换为指向其第一个元素的指针,因此函数的参数是指向
ROW1
int
数组的指针。

根据 C 标准,指向未知数量

int
的数组的指针和指向
ROW1
int
的数组的指针是兼容类型,因此编译器应该接受这一点。

© www.soinside.com 2019 - 2024. All rights reserved.