C语言中二维数组与指针的笔记
2017-08-26 15:53
309 查看
假设有如下声明
数组名arr同时也是数组首元素arr[0]的地址
即 arr = &arr[0],有 *arr = arr[0]
同时,arr[0]本身是包含两个int的数组,所以可以得出arr[0]的值等于其包含数组的首元素arr[0][0]的地址
即 arr[0] = &arr[0][0],有 *arr[0] = arr[0][0]
由上面两个表达式可以得出:
**arr = arr[0][0];
因此,我们知道,在指针与二维(或多维)数组进行操作时,涉及到需要对指针进行取值时,需要使用两次(或多次)取值才能得到通常的数值。
再来看一个复杂点的例子,假设有:
问题:算出上面这个语句的值。
我们先来看看,因为arr = &arr[0]的,则 arr + 2的结果指向了第三个包含两个int数组的元素的地址,可以写成arr + 2 –> &arr[2];
接着*(arr + 2 ),结果为*&arr[2],即arr[2],又有arr[2]的地址也是其首元素arr[2][0]的地址,所以arr[2] = &arr[2][0];
此时*(arr + 2)–> arr[2] –> &arr[2][0] ,此时指针指向的是arr[2][0]的地址,操作*(arr + 2)+ 2就是把指针指向了数组元素arr[2][0]的下两个元素,也就是&arr[2][2]
操作* ( *(arr + 2)+ 2 )
也就是对&arr[2][2]
进行取值了,最终结果为arr[2][2]。
初学者对指针和二维数组关系的简单理解,有错误希望大家多多指点,谢谢。
参考文献:《C Primer Plus 中文第五版》
int arr[3][2];/*整数数组的数组*/
数组名arr同时也是数组首元素arr[0]的地址
即 arr = &arr[0],有 *arr = arr[0]
同时,arr[0]本身是包含两个int的数组,所以可以得出arr[0]的值等于其包含数组的首元素arr[0][0]的地址
即 arr[0] = &arr[0][0],有 *arr[0] = arr[0][0]
由上面两个表达式可以得出:
**arr = arr[0][0];
因此,我们知道,在指针与二维(或多维)数组进行操作时,涉及到需要对指针进行取值时,需要使用两次(或多次)取值才能得到通常的数值。
再来看一个复杂点的例子,假设有:
* ( *(arr + 2)+ 2 )
问题:算出上面这个语句的值。
我们先来看看,因为arr = &arr[0]的,则 arr + 2的结果指向了第三个包含两个int数组的元素的地址,可以写成arr + 2 –> &arr[2];
接着*(arr + 2 ),结果为*&arr[2],即arr[2],又有arr[2]的地址也是其首元素arr[2][0]的地址,所以arr[2] = &arr[2][0];
此时*(arr + 2)–> arr[2] –> &arr[2][0] ,此时指针指向的是arr[2][0]的地址,操作*(arr + 2)+ 2就是把指针指向了数组元素arr[2][0]的下两个元素,也就是&arr[2][2]
操作* ( *(arr + 2)+ 2 )
也就是对&arr[2][2]
进行取值了,最终结果为arr[2][2]。
初学者对指针和二维数组关系的简单理解,有错误希望大家多多指点,谢谢。
参考文献:《C Primer Plus 中文第五版》
相关文章推荐
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
- C语言笔记(二维数组与数值指针)
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
- C语言深度剖析笔记(指针和数组)
- C语言学习笔记(18多级指针)
- 学习笔记43-C语言指针
- c语言编程-----指向二维数组的指针
- c语言(⼆二维数组、字符串数组、多维数组)课堂笔记加作业
- [笔记]C语言中二级指针简单例子
- C语言学习笔记之指针
- c语言二维数组与指针
- c语言中指针,二维数组,一维数组,指针数组,二级指针,应用
- 《C语言及程序设计》实践项目——二维数组与指针
- C语言二维数组中的指针问题
- 学习笔记---二维数组-数组指针-指针数组
- C语言指针和二维数组
- C语言深度剖析学习笔记-指针、数组、内存、函数
- [黑马程序员]06[C语言]指针部分笔记总结-01
- 【C语言提高25】二级指针做输入的第二种内存模型:二维数组
- 【笔记-C语言】 指针