C语言 在传递给函数后在2d数组中获取不同的值

ocebsuys  于 2023-04-05  发布在  其他
关注(0)|答案(1)|浏览(119)

我试图将一个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,这是正确的。
谢谢。

yeotifhr

yeotifhr1#

checkDiag假设第二个维度总是100,而不是声明为以下的数组:

int matrix[size][size];

用途:

int checkDiag(int size, int matrix[size][size]) { ... }

...

int result =  checkDiag(size, matrix);

相关问题