指出下面代码的输出,并解释为什么。(不错,对地址掌握的深入挖潜)

main()
{
  int a[]={,,,,};
  int *ptr=(int *)(&a+);
  printf("%d,%d",*(a+),*(ptr-));
}
输出: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].

最新文章

  1. [LeetCode] Employees Earning More Than Their Managers 员工挣得比经理多
  2. 制作dll自动注册工具
  3. 【转载】C#之int与Java之Integer的区别
  4. asp.net的code-Behind技术
  5. (medium)LeetCode 207.Course Schedule
  6. [转]Ubuntu下配置NFS服务
  7. MAC下搭建web开发环境
  8. c# 遍历文件夹及其所有文件
  9. Map(关联式容器)
  10. python中3个帮助函数help、dir、type的使用
  11. Mysql之单表记录查询
  12. HDU 5723 Abandoned country 最小生成树+搜索
  13. BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS
  14. Python学习笔记十二
  15. os模块walk方法
  16. 小甲鱼Python第二十一讲课后习题
  17. indexOf includes 区别
  18. tensorflow-优化器
  19. 初识nginx——配置解析篇
  20. 使用easypoi导出excel

热门文章

  1. SpringBoot整合Ribbon注入RestTemplate实例找不到原因
  2. JavaScript面向对象轻松入门之综合
  3. WebService之第一天
  4. 蒟蒻ACMer回忆录 · 一段弱校ACM的奋斗史
  5. notepad++插件选项没有plugin manager解决
  6. Python标准库 re
  7. Jquery实现相对浏览器位置固定、悬浮
  8. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
  9. 2017zstu新生赛
  10. Zernike矩之边缘检测(附源码)