C中的基质污染

时间:2019-09-24 21:05:21

标签: c

我是C语言的新手,我不明白为什么我不能轻松地填充2d数组。

这是我的代码:一个函数填充矩阵,另一个显示矩阵。

#include <stdio.h>

int matrix[5][5];
int size = 5;

void fill_matrix() {
    for(int k=0; k<size; k++) {
        for(int l=0; l<size; l++) {
            matrix[k][l] = k + l;
        }
    }
}

void print_matrix() {
    for(int k=0; k<size; k++) {
        for(int l=0; l<size; l++) {
            printf("%d ", *matrix[k,l]);
        }
        printf("\n");
    }
}

int main() {
    fill_matrix();
    print_matrix();
}

结果就是这个

0 1 2 3 4 
0 1 2 3 4 
0 1 2 3 4 
0 1 2 3 4 
0 1 2 3 4 

代替这个

0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 
4 5 6 7 8 

我知道答案可能非常简单,但是几个小时后我找不到解决方案,所以我在这里。

1 个答案:

答案 0 :(得分:0)

您打算做的是matrix[k][l],以解决矩阵的行和列。

*matrix[k,l]代表您所拥有的。这里发生的是在表达式中使用逗号运算符来索引数组。表达式的结果等于逗号运算符右侧的结果,因此,有效的是*matrix[l]matrix[l]仅对二维数组使用一个索引,将您指向数组的第l行,因此它实际上是int[5]类型的行。然后,当您用星号取消引用它时,您将获取该行的第一个元素的内容。