《C++ Primer》读书笔记-第三章 06 多维数组

作者:马志峰
链接: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;  
    }  
}

如果不声明为引用类型

扫描二维码关注公众号,回复: 12227514 查看本文章
for( auto row : ia )  
    for( auto col : row )

第一行取ia的每个元素,是数组类型,会被编译器转换为指向首元素的指针,第二行就会报错

因此,只有最内层的循环可以不使用引用类型

简单起见,最好都使用引用类型

指针和多维数组

多维数组的数组名也会自动转换为指针

int ia[3][4];  
auto p = ia;

理解过程:

  1. ia是一个含有3个元素的数组
  2. 它的每个元素都是含有4个元素的数组。
  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的形式和变量声明类似

猜你喜欢

转载自blog.csdn.net/qq_26751117/article/details/53156001