博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[004]多维数组和指针
阅读量:4967 次
发布时间:2019-06-12

本文共 2089 字,大约阅读时间需要 6 分钟。

因为多维数组就是数组的数组,因为我们可以这样来:

int ia[3][4];      // array of size 3, each element is an array of  ints of size 4  int (*ip)[4] = ia; // ip points to an array of 4 ints  ip = &ia[2];       // ia[2] is an array of 4 ints

这样就OK了。*ip 是 int[4] 类型 ——即 ip 是一个指向含有 4 个元素的数组的指针。

需要特别注意的是,加不加括号,是有很大区别的,比如:

int *ip[4]; // array of pointers to int  int (*ip)[4]; // pointer to an array of 4 ints

两者是完全不同的两种东西,具体可以参考示例:

1 #include 
2 3 using namespace std; 4 5 int main() 6 { 7 int i = 11; 8 int j = 12; 9 int x = 13;10 int y = 14;11 12 int* p1 = &i;13 int* p2 = &j;14 int* p3 = &x;15 int* p4 = &y;16 17 int a2[3][4] = {
21,22,23,24};18 int *p5[4] = {p1, p2, p3, p4};19 int (*p6)[4] = a2;20 21 cout << p5 << endl;22 cout << *p5 << endl;23 cout << *p5[0] << endl;24 cout << p6 << endl;25 cout << *p6 << endl;26 cout << *p6[0] << endl;27 cout << *(p6 + 1) << endl;28 }

输出结果:

svpm-dev# g++ foo.cpp -o foosvpm-dev# ./foo0xbfb2084c0xbfb20868110xbfb2081c0xbfb2081c210xbfb2082c

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

 除上面的方式外,我们可以使用typedef来简化指向多维数组的指针:

1 #include 
2 3 using namespace std; 4 5 typedef int int_array[4]; 6 #define ARRAY_SIZE_1 3 7 #define ARRAY_SIZE_2 4 8 9 int main() 10 {11 int a[ARRAY_SIZE_1][ARRAY_SIZE_2] = {11,22,33,44};12 13 int_array *ip = a;14 for (int_array *p = a; p != a + ARRAY_SIZE_1; p++) {15 for (int *q = *p; q != *p + ARRAY_SIZE_2; q++) {16 cout << *q << endl; 17 }18 } 19 }

外层的 for 循环首先初始化 p 指向 ia 的第一个内部数组,然后一直循环 到 ia 的三行数据都处理完为止。p++ 使 p 加 1,等效于移动指针使其指向 ia 的下一行(例如:下一个元素)。

内层的 for 循环实际上处理的是存储在内部数组中的 int 型元素值。首先 让 q 指向 p 所指向的数组的第一个元素。对 p 进行解引用获得一个有 4 个int 型元素的数组,通常,使用这个数组时,系统会自动将它转换为指向该数组 第一个元素的指针。在本例中,第一个元素是int型数据,q指向这个整数。系统执行内层的 for循环直到处理完当前 p 指向的内部数组中所有的元素为止。

 得到的结果如下:

svpm-dev# g++ foo.cpp -o foosvpm-dev# ./foo 1122334400000000

转载于:https://www.cnblogs.com/hustcser/p/3628699.html

你可能感兴趣的文章
第十二周学习进度博客
查看>>
js-正则表达式
查看>>
C#源码500份
查看>>
JML规格单元梳理总结
查看>>
photoshop特效字体
查看>>
利用 CreateInstance,创建本程序集的类,创建dll中的类
查看>>
知识的使用 与 知识的内化
查看>>
oracle 数据库备份还原
查看>>
C++11中新特性之:unordered_map
查看>>
java grpc 简单易懂 ---2
查看>>
五中常用简洁后台导航菜单(一级导航,二级导航,手风琴式导航,左或右悬浮式导航,树状导航)...
查看>>
百度云
查看>>
openlayers实现wfs属性查询和空间查询
查看>>
OL2中测量工具的扩展
查看>>
ADO.Net连接池
查看>>
mysql命令-use
查看>>
【BZOJ1150】数据备份(动态规划,凸优化)
查看>>
AMQ学习笔记 - 11. Spring-JmsTemplate之执行
查看>>
关于分工的思考 (Thoughts on Division of Labor)
查看>>
Python实现快速排序
查看>>