我试图将一个2d数组传入一个函数,该函数将检查数组的主对角线是否都是相同的值(如果为真,则返回1,否则返回0)。我得到一个文本文件,其中第一行是矩阵的大小,接下来的行是矩阵的值。
虽然在main函数中,数组被正确定义,当我打印出数组的索引时,我得到了正确的值,但由于某种原因,当我将数组传递给checkDiag函数时,我得到了非常奇怪的值,第一行是正确的,但所有其他行都给予了从0和1到数百万个数字的值(数字不会改变,所以我怀疑它们是内存地址)
#include <stdio.h>
int checkDiag(int matrix[][100], int size){
int checkTrue = 0;
for (int k = 0; k < size-1; ++k) {
if(matrix[k][k] == matrix[k+1][k+1] ){
checkTrue = 1;
} else{
checkTrue = 0;
}
}
printf("index 1 1 (funct): %d\n", matrix[1][1]);
return checkTrue;
}
int main(){
FILE *fp;
fp = fopen("matrix1.txt", "r");
int size;
fscanf(fp, "%d", &size);
//printf("%d\n", size);
int matrix[size][size];
int i, j;
for (i=0; i<size; ++i)
for (j=0; j<size; ++j)
fscanf (fp, "%d", &matrix[i][j]);
printf("index 1 1 (main): %d\n", matrix[1][1]);
int result = checkDiag(matrix, size);
printf("%d\n", result);
fclose(fp);
return 0;
}
文本文件:
3
4 5 6
7 4 9
3 6 4
我在函数print中得到的值是0,而主print中的值是4,这是正确的。
谢谢。
1条答案
按热度按时间yeotifhr1#
checkDiag
假设第二个维度总是100,而不是声明为以下的数组:用途: