数组名与数组地址
来源:互联网 发布:mac上parallels怎么用 编辑:程序博客网 时间:2024/05/01 06:17
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
输出:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而指针加1要根据指针类型加上一定的值,
不同类型的指针+1之后增加的大小不同
a是长度为5的int数组指针,所以要加 5*sizeof(int)
所以ptr实际是a[5]
但是prt与(&a+1)类型是不一样的(这点很重要)
所以prt-1只会减去sizeof(int*)
a,&a的地址是一样的,但意思不一样,a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].
- 数组名与数组地址
- 数组名与数组名的地址
- 数组名与数组名的地址
- 数组地址与数组名关系
- 数组名与数组名前加取地址符
- 数组名与数组名的地址是一个意思
- 数组名与数组名地址的区别
- 对数组名取地址与数组名
- 数组名与数组名取地址的区别
- 数组名与数组名取地址的差异
- 数组首地址与数组名取地址的区别
- 数组首地址与数组名取地址的区别
- 数组首地址与数组名取地址的区别
- 地址型数据,数组名与指针
- 二维数组名与地址的对应
- 数组名和数组地址
- 数组与数组名
- [学习小结]数组名与数组首元素地址解析
- 嵌入式面试资料(嵌入式程序员面试须知)
- Linux 进程管理
- 10g doc
- 毕业后的五年拉开大家差距的原因
- 子网掩码
- 数组名与数组地址
- 公司技术管理角度看C++游戏程序员发展
- 判断DataTable是否为空
- dom4j解析xml
- 10年经验分享
- 10条狗试1000瓶水是否有毒
- Windows提示框的制作
- 30岁前男人需要完成的事
- 通过程序修改注册表键值来达到修改IE配置参数的目的