首页 > 解决方案 > C中的基质污染

问题描述

我是 C 新手,我不明白为什么我无法轻松填充二维数组。

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

#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 

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

标签: c

解决方案


你的意思是matrix[k][l]处理矩阵的行和列。

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


推荐阅读