C++数组名a和&a的区别
来源:互联网 发布:长沙大火知乎 编辑:程序博客网 时间:2024/05/28 20:18
http://blog.csdn.net/theonegis/article/details/40430049
先看一道测试题:
猜猜结果?
下面说说a和&a的区别,说完了,再看该题的结果。
C/C++里面的数组名字会退化为指针,所以数组名a实际指的是数组的第一个元素的地址。而数组名作为指针来讲有特殊性,它正在它所指向的内存区域中,&a的值和a的数值是相同的(可以输出观察一下),但是类型和意义不同。而指针的加法操作和指向的数据类型密切相关。
所以,int a[10]; a就相当于int *,如果是对它加1(a + 1)是相当于a + 1 * sizeof(int)。但是&a的类型则相当于int **,是所谓指向数组的指针,是数组元素类型的二级指针,对它加1是相当于 &a + 1 * sizeof(a)的,所以会偏移一个数组长度。
现在来看程序,&a + 1其实偏移了一个数组的长度即就是6,其实在VS中通过调试可以查看&a + 1的类型,其类型为int[5] *,所以(int*)(&a + 1)将其强制转成int *类型。这里应该很明显了a + 1指向的是数组a的第二个元素,p指向的是数组后面的元素(这里我们不知道它是多少),p - 1则指向数组的最后一个元素!
所以程序运行的结果为3 6.
阅读全文
0 0
- 数组名a和&a的区别
- 数组名a和&a 的区别
- 数组名a和&a的区别
- 数组名a和&a的区别
- 数组名a和&a的区别
- 数组名a+1和&a+1的区别
- C++数组名a和&a的区别
- C++数组名a和&a的区别
- 数组名a与&a的区别
- 数组名a与&a的区别
- 数组名 a 与&a的区别
- 数组名a和&a的不同
- a为数组名,a与&a的区别
- a为数组名,a与&a的区别
- 数组a[],a和&a的区别
- c语言整理数组a和&a的区别
- C语言学习知识点(四):数组名a与取地址数组名&a的区别
- C语言数组名a和&a小结
- .NET 术语
- 关于阶乘的面试题总结
- 数组removeObjectIdenticalTo讲解
- 记一个腾讯信鸽引发的线程卡死问题
- boost总结之variant
- C++数组名a和&a的区别
- C++中的继承问题
- Windows下Java开发环境搭建(IDEA+JDK+Maven+Tomcat)
- R语言筛选出不重复的行的几种方法
- PAT 1038统计同成绩学生
- 系统服务的控制
- linux使用:配置SSH免密码登陆
- js控制Date类型转换为String类型
- HDU 2853 Assignment [网络流 最小费最大流]