行列と関数を使用して 0 から 20 までの乱数を入力し、値を画面に表示する学校の演習を行っていますが、最初の関数が終了した後、行列のサイズを格納する変数の値が変更されます、参照によって渡されない場合でも、常に 0 から 20 の間の数値であるため、これは乱数に関連しています。これは、行列のサイズが 3x4 または 4x3 よりも大きい場合 (4x4 以上など) にのみ発生します。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void creaMatrix(int base, int height, int matrix[base][height]){
for (int i = 0; i < base; i++) {
for (int j = 0; j < height; j++) {
matrix[i][j] = rand()%21;
}
}
}
void visualizzaMatrix(int base, int height, int matrix[base][height]){
for (int i = 0; i < base; i++) {
for (int j = 0; j < height; j++) {
printf("%d\t",matrix[i][j]);
}
printf("\n");
}
}
int main(int argc, char const *argv[]) {
int n = 0 , m = 0;
int matrix[n][m];
srand((unsigned)time(NULL));
printf("base:\n");
scanf("%d",&n);
printf("height:\n");
scanf("%d",&m);
creaMatrix(n,m,matrix);
printf("n: %d m: %d\n",n, m); // here n and m change value for some reason
visualizzaMatrix(n,m,matrix);
return 0;
}