我試圖撰寫一個函式來填充一個具有最小值和最大值之間隨機值的二維陣列。但是,它只是將值正確地分配給第一行,而將垃圾值分配給其余行。
這是代碼:
#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
uj5u.com熱心網友回復:
您正在使用不兼容型別的指標。
在函式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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/461259.html
上一篇:使用for回圈將2d串列中的元素替換為1d串列時遇到問題
下一篇:什么是(;;)?
