c - 如何使用 C 中的指针在 2d/3d 数组中移动?
问题描述
今天我为我的学习编写了一点代码。我对 2d(以及 C 中的 3d 数组)有疑问。例如,当我为数组分配内存或制作静态数组时:
//dynamic
int *a=(int *)malloc(5*5*sizeof(int));
//OR
//static
int ar[5][5] = {0};
int *a= ar[0][0];
我不知道如何使用指针在这个矩阵中正确移动。我尝试了一个看起来像这样的 for 循环来打印它的元素:
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
printf("%d ",*((a+i)+j));
}
puts("\n");
}
但它不起作用。当我输入数组前 25 个以 1 开头的 int 数字时,如下所示:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
我得到了 printf 输出,例如:
1 6 11 16 21
6 11 16 21 22
11 16 21 22 23
16 21 22 23 24
21 22 23 24 25
输出仅包括第一列和最后一行。
我在 youtube 上看到了如何正确执行此操作的教程,但不知何故我误解了这个话题。有人可以告诉我如何使用指针来做到这一点吗?
谢谢你的时间!
解决方案
您需要将行索引乘以行长度才能到达该行。
printf("%d ",*((a+i*5)+j));
推荐阅读
- node.js - JHipster 安装失败
- webpack - webpack 带有样式加载器的错误
- java - IntelliJ 中文件更改的代码生成
- c - 将结构传递给C中的函数时损坏
- reactjs - 无法将 SVG 图像导入我的打字稿应用程序
- gradle - Flutter App 卡在“正在运行 Gradle 任务 'assembleDebug'...”
- r - 运行 rmh 时尝试保存中间状态会产生错误
- python - 从带有后缀的 Python 列表创建子集
- regex - 如何找到句子中包含的单词
- javascript - 如何使用 Caspio 数据页在 Angular 8 应用程序中嵌入/调用外部 javascript