《C++ Primer》读书笔记-第三章 06 多维数组
来源:互联网 发布:淘宝u站天天特价 编辑:程序博客网 时间:2024/06/10 08:36
作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23579860
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://zhuanlan.zhihu.com/p/23579860
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:
- 文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。
- 原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
- 本文仅作学习交流使用,禁止任何形式的转载
多维数组其实就是数组的数组
int ia[3][4];
由内向外读:ia是含有3个元素的数组,它的每个元素都是含有4个整数的数组
初始化
int ia[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };
本质上和一维数组的初始化没有区别,ia有3个元素,所以外层花括号里面有3个花括号,每个花括号分别用来初始化ia的一个元素
和一维数组一样,也可以只给出一部分初始值
int ix[3][4] = { {0}, {4}, {8} }; int ia[3][4] = { 0, 3, 6, 9 };
下标
ia[2][3] 返回ia第二个元素(数组)的第三个元素
ia[1] 返回ia的第一个元素(数组)
注意理解多维数组其实就是数组的数组就可以了
范围for
可以使用for循环和范围for来遍历多维数组
在使用范围for时,最好将控制变量都声明为引用类型
size_t cnt = 0; for( auto &row : ia ) { for( auto &col : row ) { col = cnt; ++cnt; } }
如果不声明为引用类型
for( auto row : ia ) for( auto col : row )
第一行取ia的每个元素,是数组类型,会被编译器转换为指向首元素的指针,第二行就会报错
因此,只有最内层的循环可以不使用引用类型
简单起见,最好都使用引用类型
指针和多维数组
多维数组的数组名也会自动转换为指针
int ia[3][4]; auto p = ia;
理解过程:
- ia是一个含有3个元素的数组
- 它的每个元素都是含有4个元素的数组。
- 因此,它的首元素也是含有4个元素的数组
- 指向首元素的指针就是指向含有4个元素的数组的指针
等价于
int (*p)[4] = ia;
遍历每个元素
for( auto p = ia; p != ia + 3; ++p ) { for( auto q = *p; q != *p + 4; ++ q ) { cout << *q << ' '; } cout << endl; }
对p解引用可得到含有4个元素的数组,*p是指向它的首元素的指针
也可以使用begin和end函数
for( auto p = begin(ia); p != end(ia); ++p ) { for( auto q = begin(*p); q != end(*p); ++ q ) { cout << *q << ' '; } cout << endl; }
使用类型别名简化书写
using int_array = int[4]; typedef int int_array[4];
别忘了,typedef的形式和变量声明类似
0 0
- 《C++ Primer》读书笔记-第三章 06 多维数组
- 《C++ Primer》读书笔记第三章-4-数组 And 多维数组
- 《C Primer Plus 5th》读书笔记-----指针和多维数组
- c++primer之多维数组
- 《C++ Primer》读书笔记-第三章 05 数组
- C++Primer再读读书笔记:第三章
- C++Primer读书笔记(第三章)
- C++Primer读书笔记第三章(上)
- C++Primer读书笔记第三章(下)
- c++primer笔记--3.6多维数组
- C++primer学习笔记-----3.6多维数组
- c++primer 第三章数组 string vector
- 第三章 3.6 多维数组
- c++ primer第五版(中文)习题答案 第三章第六节-多维数组
- C++primer 第三章
- C++primer 第三章
- c++primer学习笔记(4.4)多维数组
- c primer plus 指针与多维数组探究
- Mybatis学习笔记三:实现增删查改
- 谁杀死了MySQL(二)
- mysql查询以前的数据(mysql查询七天前/半小时前等)
- Android开源项目之电脑极客app
- 进程描述和进程的创建
- 《C++ Primer》读书笔记-第三章 06 多维数组
- Android开发——支付宝和微信支付快速接入流程
- Java CAS 和ABA问题
- 数据结构算法笔记 lesson6 循环链表1
- 深入理解Android虚拟机体系结构
- Android项目的创建及部署
- Linux sar命令详解
- 收藏
- 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别