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 中元素的类型的副本。

 

posted @   Q星星  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示