我的二维数组被分配了错误的值

My 2d array is being assigned the wrong values

我正在尝试编写一个函数来使用最小值和最大值之间的随机值填充二维数组。但是,它只是正确地将值赋予第一行,将垃圾值赋予其余部分。

代码如下:

#include <stdio.h>
#define COL 100
#include <stdlib.h>

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
int max);

int main(){
    int Mat[5][5];
    PopulateArray2D(Mat,5,5,1,10);

    for(int i=0;i<5;i++){//prints 2d array
        for(int j=0;j<5;j++){
            printf("%d ",Mat[i][j]);
        }
        printf("\n");
    }
}

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
    int max){//puts random values into the array
    int randNum = 0;
    for(int i=0;i<rowsize;i++){
        for(int j=0;j<colsize;j++){
            randNum = rand()%(max-min + 1) + min;
            Mat[i][j] = randNum;
        }
    }
}

输出为:

4 7 8 6 4 
22032 15775231 0 194 0 
673948839 32766 673948838 32766 1067381581 
22032 -1714622520 32694 1067381504 22032 
0 0 1067380928 22032 673949104

您正在使用不兼容类型的指针。

在函数 main 中,数组声明为

int Mat[5][5];

但在函数PopulateArray2D中声明为

void PopulateArray2D(int Mat[][100], unsigned int rowsize, unsigned int colsize, int min, 
    int max);

这就是问题所在。即作为函数参数的数组隐式转换为int ( * )[5]类型,而函数参数调整为指针类型int ( * )[100].

要么像

那样声明函数
void PopulateArray2D(int Mat[][5], unsigned int rowsize, unsigned int colsize, int min, 
    int max);

或者,如果编译器支持可变长度数组,则声明函数,如

void PopulateArray2D( unsigned int rowsize, unsigned int colsize, int Mat[][colsize], int min, 
    int max);

并称其为

PopulateArray2D(5,5,Mat,1,10);