解析数组名
来源:互联网 发布:课程表数据库设计 编辑:程序博客网 时间:2024/06/05 12:42
解析数组名
作者:黑色印记
很多刚接触C语言的朋友总会觉得数组和指针是十分复杂的,特别对于多维数组的问题,感到头痛无比。我认为困惑大家的是对于数组名的理解不清晰所造成的。在这里,我将从一维数组名,二维数组名,三维数组名,向大家解析其中的注意事项。
在进入正题前,我想让大家知道,数组名是一个指针常量,保存的是首元素的地址。(因此,数组名不能做自加操作)
一维数组:
例:int a [ 2 ] ;
a 保存的是数组首元素的地址 a +1,增加4个字节
&a 保存的是数组的地址a +1,增加8个字节
(一个是元素地址,一个是一维数组的地址,注意区分两者的区别)
由 *(&a) = a
可知: 对数组的地址取值等于数组首元素的地址.
二维数组:
例:int a[ 2 ] [ 2 ] ;
由于a是二维数组的数组名,所以它的首元素是一个一维数组。
a + i 第i个一维数组的地址
*( a + i ) + j 第i个一维数组的第j个元素的地址
*(*(a + i) + j)第i个一维数组的第j个元素的值
因为a是一维数组的地址,所以,要用数组指针来接。即:
int(*pa)[ 2 ] = a ; pa + 1 ,加8个字节
因为&a是二维数组的地址,所以,要用二维数组指针来接。即:
int(*pa)[2][2] = &a; pa + 1 , 加16个字节
三维数组:
例: inta[2][2][2];
和二维数组同理,同学们可以尝试自己理解一下。
a + i第i个二维数组的地址
*(a + i) + j第i个二维数组的第j个一维数组的地址
*(*(a + i) + j) + k第i个二维数组的第j个一维数组的第k个元素的地址
int(*pa)[2][2] = a;pa + 1, 加16个字节
int (*pa)[2] = *a ;pa + 1,加8个字节
int (*pa) = **a ;pa + 1,加4个字节
int (*pa)[2][2][2] = &a;pa + 1,加32个字节
如果用画图的方式表示数组中的元素,在内存中的存放方式,会更加容易理解,有条件的同学可以试一试。
- 二维数组名解析
- 解析数组名
- [学习小结]数组名与数组首元素地址解析
- c中的数组名的指针类型解析
- 数组名
- 数组名
- 数组名
- 数组名
- 数组名 和 &数组名
- 数组名=&数组名
- 数组与数组名
- 函数名与数组名
- 数组名是什么 数组名揭秘
- 数组名与数组名的地址
- 数组名和数组名取地址
- 数组名VS数组名取地址
- 数组名和数组名取地址&
- 数组名和数组名取地址&
- la 3078
- Android开发学习ing[资料和代码库]
- C语言快排函数qsort()
- Ubuntu下 安装Android Studio
- C++ 网络编程客户端
- 解析数组名
- UVA 1600 Patrol Robot
- Python + win10 +Apache CGI 错误500的解决方法
- 有意思的python集锦
- 【算法总结系列-5】链表与模拟链表
- iOS 数字 千分位显示 每三位逗号隔开
- SQL SERVER 自连接、外连接
- win7 F1指示灯老是亮着的解决方法
- iOS代理