C/C++指针与数组(二)

您所在的位置:网站首页 数组的定义抽象 C/C++指针与数组(二)

C/C++指针与数组(二)

2023-03-14 13:44| 来源: 网络整理| 查看: 265

数组与运算符*、&和[],行指针和列指针的概念 一、一维数组

#include int main(int argc, char *argv[]) { int a[5] = { 1, 2, 3, 4, 5 }; std::cout if (i == 0) { std::cout std::cout std::cout 7,8,9 } }, { { 10,11,12 }, { 13,14,15 }, { 16,17,18 } }, { { 19,20,21 }, { 22,23,24 }, { 25,26,27 } } };

首先,对数组名取地址

#include"header.h" int main(int argc, char *argv[]) { std::cout std::cout std::cout { 10,11,12 }, { 13,14,15 }, { 16,17,18 } } 的数组名,它指向这个数组中的第一个元素即一维数组{ 10,11,12 }(这个紧接着就会讨论到),对它取地址即&a[1]就指向整个数组。 综上所述,a和&a[0]具有共同的类型int(*)[3][3],而a[0]的类型是int(*)[3](这个紧接着就会讨论到)。

接着,进入第一个二维数组

#include"header.h" int main(int argc, char *argv[]) { std::cout std::cout std::cout std::cout { { { 1,2,3 }, { 4,5,6 }, { 7,8,9 } }, { { 10,11,12 }, { 13,14,15 }, { 16,17,18 } }, { { 19,20,21 }, { 22,23,24 }, { 25,26,27 } }, { { 28,29,30 }, { 31,32,33 }, { 34,35,36 } } }, { { { 51,52,53 }, { 54,55,56 }, { 57,58,59 } }, { { 60,61,62 }, { 63,64,65 }, { 66,67,68 } }, { { 69,70,71 }, { 72,73,74 }, { 75,76,77 } }, { { 78,79,80 }, { 81,82,83 }, { 84,85,86 } } } };

例如 *(*(*(*(a + 0) + 1) + 1) + 2),由内向外解析:(a + 0)表示指向这个四维数组的第一个三维数组,类型为int(*)[3][3][3],对它解引用后即*(a + 0)就指向三维数组中的第一个二维数组,类型为int(*)[3][3],+1表示移动“一位”,即*(a + 0) + 1指向这个三维数组中的第二个二维数组,类型为int(*)[3][3],解引用后即*(*(a + 0) + 1) 就指向这个二维数组中的第一个一维数组,类型为int(*)[3],+1表示移动“一位”,即(*(*(a + 0) + 1) + 1指向这个二维数组中的第二个一维数组,类型仍然为int(*)[3],解引用后即*(*(*(a + 0) + 1) + 1)指向这个一维数组中的第一个元素,类型为int(*),+2表示移动“两位”,即*(*(*(a + 0) + 1) + 1) + 2指向这个一维数组中的第三个元素即15。

验证:

#include"header.h" int main(int argc, char *argv[]) { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3