c - 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
我知道答案可能非常简单,但是几个小时后我无法找到解决方案,所以我在这里。
解决方案
你的意思是matrix[k][l]
处理矩阵的行和列。
相反,你所拥有的,*matrix[k,l]
. 这里发生的是在表达式中使用逗号运算符来索引数组。表达式的结果等于逗号运算符右侧的结果,所以实际上你所拥有的是*matrix[l]
. matrix[l]
,仅对二维数组使用一个索引,将您指向数组的l
第 th 行,因此它本质上是 类型int[5]
。然后,当您使用星号取消引用它时,您将获取该行第一个元素的内容。
推荐阅读
- python - CMAP 返回 'TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是 'list''
- jwt - 我有问题,我无法获取刷新令牌
- instrumentation - 调试未完成跟踪的最佳实践
- apache-spark - 在 Spark SQL 中使用 Presto JDBC 时无法识别的连接属性“url”
- rest - 我可以在我的 RESTful API 中使用重定向来为用户特定的内容设置别名吗
- python - Python OOP 问题:当 __init__() 函数中未将其作为参数提及时,类中的函数如何获取输入值?
- excel - Google 表格:仅导入某些选项卡可下载的 xlsx 链接?
- google-chrome - 使用 D3 缩放时特定于 Chrome 的问题
- window-managers - 有没有办法在它产生的同一个标签中启动一个 dwm 窗口?
- machine-learning - 如何从所有预测的集群中获取 n 个样本/事件并在 PySpark 中以数据框的形式返回?