打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
面试题:a和&a有什么区别

2012-08-18 19:06:16|  分类: C/C++ |  标签:c++  面试  |字号 订阅

#include <stdio.h>

void main()
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int *)(&a+1);
printf("%d, %d", *(a+1), *(ptr-1));
return;
}

这个题很有迷惑性,必须对数组和指针的含义非常了解才可以给出答案。
*(a+1)就是a[1],但是*(ptr-1)不是a[0]。因为&a+1 并不是数组a的首地址加1,而是数组a的地址加以一个数组a的偏移,即偏移了一个数组的大小(5个int的地址)。
所以说int *ptr = (int *)(&a+1)的结果是ptr指向了数组的第六个元素a[5]。
出现这种情况的原因就是&a和a的含义是不同的:数组名a可以看成是数组的首地址,a+1是数组的首地址加1,是数组的第二个元素a[1]。而&a是数组a的指针,其类型是int(*)[5],而指针加1是要根据指针类型而加上一定的值的,不同类型的指针加1后的结果是不相同的。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于指针的加减
学习c++--指针、动态分配内存
一个C语言问题,关于指针、数组、存储等
指针基本操作总结-赋值
05选择题:指针、数组
总结:c语言中指针的学习
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服