c++ - 如何通过 C++ 中的指针循环遍历多维数组
问题描述
循环遍历一个简单的数组是没有问题的,但是使用指针循环遍历多维数组的正确方法是什么?
#include <iostream>
int main(int argc, char* argv[])
{
int data1[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
for(auto *p = data1; p!=data1+9; ++p)
{
std::cout << (*p) << ' ';
}
std::cout << std::endl;
int data2[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
for(auto *lineP = data2; lineP!=data2+3; ++lineP)
{
for(auto *p = &(lineP[0]); p!= &(lineP[3]); ++p)
{
std::cout << (*p) << ' ';
}
std::cout << std::endl;
}
}
在这里data1
循环正确地产生预期的输出。但是data2
循环在某些方面是错误的,因为输出不是元素的值,而是地址。
示例输出:
1 2 3 4 5 6 7 8 9
0x7ffde45b77a0 0x7ffde45b77ac 0x7ffde45b77b8
0x7ffde45b77ac 0x7ffde45b77b8 0x7ffde45b77c4
0x7ffde45b77b8 0x7ffde45b77c4 0x7ffde45b77d0
解决方案
给定: int mdArray[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
- mdArray 是指向 3 元素数组的指针
- 该数组中的每个元素都是指向 3 元素数组的指针
- 这些数组中的每个元素都是一个整数
因此,只需将您的原始语法嵌套在自身内部,替换为取消引用的 var 而不是多维数组本身的名称
int mdArray[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
for(auto *d1 = mdArray; d1 != (mdArray + 3); d1++)
{
for(auto *d2 = *(d1); d2 != (*(d1) + 3); d2++)
{
std::cout << *(d2) << ' ';
}
std::cout << std::endl;
}
推荐阅读
- python - Anaconda 3 不会在 Windows 10 上加载 BLAS 库,除非以管理员模式运行
- r - 将值切割为间隔并在 ggplot2 中绘制热图
- javascript - 如何解构这个数组
- arrays - 如何在 C 中将单词数字转换为整数?
- angular - 清除角度 8 中的可观察输入
- javascript - SparkAR - 不能在代码中改变材质的纹理?
- highcharts - Highcharts - 将 css 添加到 highcharts 图例中
- go - 解析字符串返回月份超出范围错误
- php - PHP 并不总是从 $_GET 中获得价值
- html - 使用引导程序时使用 css 更改字体颜色?