指针讲解(二)
来源:互联网 发布:reputation 专辑 知乎 编辑:程序博客网 时间:2024/05/18 09:04
二维数组指针(二)
在(一)中,我们简单的讲解了简单指针,内容包含三部分数组作为形参,解引用,定义指针,这小节我根据自己的认识讲解一点二维数组的认知
什么是二维数组?
二维数组形如 int arr[ 3 ][ 4 ] ,这样形式的数组,在一维数组中 我们说 int arr[ 3 ]={1,2,3} 代表一个数组arr中含有3个整型元素,那么 int arr[ 3 ][ 4 ] 跟一维数组类似,表示 数组arr中含有 3*4=12个整型元素,也可以像理解一维数组一样理解二维数组
arr[ 3 ][ 4 ]={ {1,2,3}, {4,5,6,}, {7,8,9} } ,二维数组其实是数组的数组,即数组arr含有3个一维数组,每个一维数组含有4个整型元素,个人是这样理解arr[ 3][4 ] 同等于 arr[3]={ arr[0] , arr[1] , ar r[2] } (个人理解) 也可以理解为3*4的矩阵
int a[3][4] 最好的官方理解就是3*4方阵
a[0] → arr[0][0] arr[0][1] arr[0][2] arr[0][3]
a[1] → arr[1][0] arr[1][1] arr[1][2] arr[1][3]
a[2] → arr[2][0] arr[2][1] arr[2][2] arr[2][3]
现在讲几个概念
当数组名 单独存在一个printf语句输出内容中 或&a单独存在的时候时 表示一个数组整体
printf("%d,"sizeof(a)) 48 整个数组的大小,12个元素,一个元素四个字节(int在vs2008占4字 节)
printf("%d,"sizeof(&a)) 假如 数组a的第一个元素地址是2000,那么前面的printf语句结果为 2000+12*4
*a a并没有单独存在,还有一个解引用,在一维数组中,数组名就是一个指针,指向数组的第一个元 素 ,那么在二维数组中也类似(联想3*4的矩阵),指针实际是指向数组的0行首元素,*a就是 第0行第0列元素的地址
a+i 指向第 i 行首元素,那么结合上一题,那么可以这样总结,对于二位数组,a的+/-实际上是对行的 加减
a[i] 指向第i行首元素
*(a+i) 对第i行首元素解引用,实际就是第 i 行首元素地址
*(a+i)+j 在一维数组中,a={0,1,2} a指向0,当a+3指向的就是元素2,同理,指针a指向第 i 行第 j 列的元 素,解引用为第 i 行第 j 列的元素的地址(可以这样理解,*(a+i)则是对数组的数组进行操作,a+i指向第 i 行首元素,解引用后就是进入了数组(a[0],a[1],a[2])的数组里面,*a[ i+0 ]+1实际就是当前部分解引用,指针从a[0] a[1] a[2]进入a[0]中,就指向a[0][0],+j 指针移动到 a [ 0 ] [ j ]的位置 )
*(*(a+i)+j) 整体来看 其实就是对上式解引用,其实就是第 i 行第 j 列的元素的值
&a[i] a[ i ]是表达第 i 行首元素地址
&a[i][j] a[ i ][ j ]是表达第 i 行第 j 列元素地址
&(a+i) 第i行的首地址
搞懂了这些,你的二维数组也基本理解了,下次我们将讲一些这些鬼玩意儿的应用,坑很多
- 指针讲解(二)
- 结构体讲解(二)---指向结构的指针
- C语言快速讲解(二)指针的用法
- 指针讲解
- 指针(二)字符串指针
- 面向对象讲解(二)
- 触发器实例讲解(二)
- android binder 讲解(二)
- C#入门讲解(二)
- dicom格式文件讲解(二)
- 排序算法讲解(二)
- BigDecimal讲解简介(二)
- GetMemory错误讲解(指针练习)
- GetMemory错误讲解(指针练习)
- GetMemory错误讲解(指针练习)
- GetMemory错误讲解(指针练习)
- GetMemory错误讲解(指针练习)
- GetMemory错误讲解(指针练习)
- Android Studio鼠标悬停显示注释
- 形参个数可变的方法
- 黑科技
- JDBC连接数据库的步骤
- linux网络编程之socket(九):使用select函数改进客户端/服务器端程序
- 指针讲解(二)
- QT学习笔记1
- 公开课资源
- ELK 日志分析平台搭建
- PAT 写出这个数 java实现
- iOS开发之静态库.a的制作教程
- C下常用字符串处理函数<string.h>
- D3D11教程二十五之DepthBuffer(深度缓存)
- Zookeeper Api(java)入门与应用(转)