二维数组指针
2015-08-26 15:43
225 查看
我们知道定义一个一维数组int a[10],a代表什么?a代表一维数组a中第一个元素的首地址,所以*a是a[0]的值,可以试试。
而定义一个二维数据int a[10][5],a代表什么?a同样代表二维数据a中第一个元素的首地址,但不同的是这个第一个元素是a[0]同样是一个数组,所以*a不会返回a[0][0]的值,因为它不代表a[0][0]的地址。那它返回的是什么呢?既然在二维数组中,a代表a[0]这个数组的地址,那么*a就应该是a[0]的值,可是a[0]是个数组,它的值是不能整体访问的,所以只能返回这个数组首元素的首地址,也就是a[0][0]的地址,所以a[i][j]可以换
算成以指针的形式表示:*(*(a+i)+j)。
来分析一下这个表示*(*(a+i)+j)。其中a代表第一个元素(是个数组a[0])的地址,这个时候地址偏移以这个地址所代表的类型进行偏移,每移动1个位置,偏移40字节。那么(a+i)就是第i行元素的地址。而按照上面的分析*(a+i)即是第i行第一个元素的首地址,这个时候地址偏移以这个地址所代表的类型进行偏移,每移动1个位置,偏移4字节。
可以调试一下看看,定义一个二维数组上面说过*a代表是第一个元素(这个元素仍是个数组),*a 的类型是数组类型,可以试试(*a)[0],(*a)[1]...代码都是正确的,那么**a=a[0][0]。那么a和a+i的类型是什么呢?a+i是第i行元素(是个数组)的地址,那么他应该是应该是个指向这个一维数组的指针,是int (*)[]类型的。a呢?按理说也应该是int (*)[],因为a是第一行元素的地址,可是我们定义了a是int[][]类型,a同时也代表了整个二维数组,所以会是int[][]类型。
而定义一个二维数据int a[10][5],a代表什么?a同样代表二维数据a中第一个元素的首地址,但不同的是这个第一个元素是a[0]同样是一个数组,所以*a不会返回a[0][0]的值,因为它不代表a[0][0]的地址。那它返回的是什么呢?既然在二维数组中,a代表a[0]这个数组的地址,那么*a就应该是a[0]的值,可是a[0]是个数组,它的值是不能整体访问的,所以只能返回这个数组首元素的首地址,也就是a[0][0]的地址,所以a[i][j]可以换
算成以指针的形式表示:*(*(a+i)+j)。
来分析一下这个表示*(*(a+i)+j)。其中a代表第一个元素(是个数组a[0])的地址,这个时候地址偏移以这个地址所代表的类型进行偏移,每移动1个位置,偏移40字节。那么(a+i)就是第i行元素的地址。而按照上面的分析*(a+i)即是第i行第一个元素的首地址,这个时候地址偏移以这个地址所代表的类型进行偏移,每移动1个位置,偏移4字节。
可以调试一下看看,定义一个二维数组上面说过*a代表是第一个元素(这个元素仍是个数组),*a 的类型是数组类型,可以试试(*a)[0],(*a)[1]...代码都是正确的,那么**a=a[0][0]。那么a和a+i的类型是什么呢?a+i是第i行元素(是个数组)的地址,那么他应该是应该是个指向这个一维数组的指针,是int (*)[]类型的。a呢?按理说也应该是int (*)[],因为a是第一行元素的地址,可是我们定义了a是int[][]类型,a同时也代表了整个二维数组,所以会是int[][]类型。
相关文章推荐
- linux总结应用之六 驱动设备块设备中的中断
- HTML中rel属性分析
- jetty中禁止使用chunked传输数据
- ZooKeeper伪分布式安装
- Java之m2eclipse插件安装
- 自动轮播图
- 排序
- mfc 窗口控件全屏显示
- 我的人生1
- PHP 正则表达式
- Java多线程 -- 线程的交互
- Netty之有效规避内存泄漏
- php对接移动支付宝流程以及商户的私钥、公钥说明
- LeetCode 177 Nth-Highest Salary mysql,取第n条数据,limit子句 难度:1
- 详细的导入导出实例 (20150806)
- html5小趣味知识点系列(一)pubdate
- 【LeetCode】21. Merge Two Sorted Lists
- Java Gossip: Statement、 ResultSet
- WIN10或WIN8.1系统下MDK“the arm c/c++ compiler 已停止工作”解决办法之一
- [python] 向指定套接字发送信息