数组的粒度问题
来源:互联网 发布:程序员 转行 投资 编辑:程序博客网 时间:2024/06/06 02:17
在C中,在几乎所有使用数组的表达式中,数组名的值是个指针常量,也就是数组第一个元素的地址。 它的类型取决于数组元素的类型: 如果它们是int类型,那么数组名的类型就是“指向int的常量指针“。
在以下两种场合下,数组名并不是用指针常量来表示,就是当数组名作为sizeof操作符和单目操作符&的操作数时。 sizeof返回整个数组的长度,而不是指向数组的指针的长度。 取一个数组名的地址所产生的是一个指向数组的指针,而不是一个指向某个指针常量的指针。所以&a后返回的指针便是指向数组的指针,跟a在指针的类型上是有区别的。
请看下面的例子:
从以上输出我们可以看出:数组名和数组名取地址在数值上是相同的,均表示数组第一个元素的地址。但是二者的颗粒度不同。
当数组是一维数组时,数组名是以一个数组元素为颗粒度,表现为“当数组名加1时,这里的1表示一个数组元素单元”,例子中的数组元素为整数,所以数组名加1时地址加4;而数组名取地址&以整个数组为颗粒度,表现为“当数组名取地址&加1时,这里的1是表示整个数组单元”,例子中的数组为有5个元素的整型数组,所以数组名取地址&加1时,地址加20.
当数组是二维数组时,数组名array、array[0]、&array[0][0]以及数组名取地址&在数值上是相同的,同样各个之间的颗粒度不同。其中array[0]以及&array[0][0] 的颗粒度相同,均是以一个数组元素为颗粒度,所以它们加1后,地址加4;而数组名和数组名取地址&颗粒度不同,前者以一行元素为颗粒度,后者以整个数组单元为颗粒度,所以前者加1,地址加3*4,后者加1,地址加6*4. 阅读全文
0 0
- 数组的粒度问题
- 1.2.1 粒度的问题
- 搜索引擎中的粒度问题
- 三维重建:SLAM的粒度和工程化问题
- 管理的粒度
- 关于粒度的认识
- 控制锁的粒度
- 框架设计的粒度
- 数据仓库的粒度
- 控制锁的粒度
- 函数的粒度
- synchronized锁的粒度
- 软件的粒度
- 软件设计的粒度
- 数据库锁的粒度
- 动态数组之四:数组粒度
- RSM视图的粒度机制
- 数据仓库学习--数据仓库的粒度
- shell脚本学习第四天——bash内部变量,变量主串,变量替换
- 数据结构基本概念总结
- 不容易系列之(4)——考新郎--错排公式&&排列组合
- Matisse Android图片选择器详细使用
- 洛谷 P1023 税收与补贴问题 (2000NOIP提高组)
- 数组的粒度问题
- 内存对齐问题
- POJ2240汇率转化计算
- hihocoder 1049 : 后序遍历
- python 多线程的启动与阻塞
- jdbc操作sqlserver数据库
- Java设计模式学习——创建型
- ArrayBuffer中保存的Array被后面的覆盖
- hdu3639 Hawk-and-Chicken【强连通】