06_C++多维数组
1.遍历数组元素
多维数组,利用数组指针。
#include<iostream> #include <stdio.h> using namespace std; int main() { int arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} }; int(*p)[5] = arr; cout << "*p:" << *p << endl; cout << "*p+1:" << *p + 1 << endl; cout << "*(*p+1):" << *(*p + 1) << endl; cout << "*(p+1):" << *(p + 1) << endl; cout << "*(*(p+1)+1):" << *(*(p + 1)+1) << endl; for (int i = 0; i < 3; i++) { for (int j = 0; j < 5; j++) { cout << *(*(p + i)+j) << endl; } } }
输出:
p是二维数组第一行的地址,*p存储的数组首元素的地址(p与*p的差别可以看上一篇笔记);
*p+1也就是下一个元素的地址,*(*p+1)也就对应2这个元素;
p+i是二维数组第i行的地址,*(p+i)是二维数组第i行元素组成的一维数组的数组名,也是第i行这个一维数组的首元素地址;
*(p+i)+j就是第i行第j列元素的地址。
C++11可以通过更快捷的方式遍历数组,如下所示:
for (auto &row : arr) { for (auto num : row) { cout << num << " "; } cout << endl; }
这段代码可以正确输出二维数组 arr 中的每个元素,它使用了范围-based for 循环(range-based for loop),而范围-based for 循环仅适用于迭代器或具有 begin() 和 end() 成员函数的容器。并使用了引用符号 & 来避免副本的创建。在这段代码中的第一个 auto &row,auto 表示编译器会自动推导 row 的类型,并且由于使用了引用符号 &,它会推导为一个引用类型。可以将 row 视为一个别名,它引用了 arr 中的每一行。通过引用 row,可以直接访问二维数组中的每个元素。在第二个 auto num 中,auto 会自动推导 num 的类型。由于它是在内部循环中声明的,并且是对 row 中的元素进行迭代,num 的类型将是 row 中元素的类型的副本。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程