野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 172077|回复: 836

【每日一题讲解】数组名加减的问题

  [复制链接]
发表于 2013-11-20 00:25:14 | 显示全部楼层 |阅读模式
本帖最后由 山外メ雲ジ 于 2013-11-20 00:31 编辑

  1. //运行以下程序,求运算结果

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

  5. //可供选择的答案:
  6. //A.1
  7. //B.2
  8. //C.4
  9. //D.随机值
复制代码
国际惯例,答案回复可见。我们出题目的目的,是给大家一个思考的机会,不要题目都不去思考,直接看答案哦,那样学不了东西的。
大家回复的时候,把答案也写上去哦。

这题目的关键地方在于这句话:
  1. &a+1
复制代码
大家能不能区分下面这语句和上面那语句的区别:
  1. a+1
复制代码
两者之前的意思是完全不同的,大家看下面代码注释把
  1. int a[4]={1,2,3,4};  // a:数组首元素的首地址,即 a[0];    &a:数组的首地址  
  2. int *ptr=(int*)(&a+1); // a+1:数组的下一元素的首地址,即 a[1];
  3.                        // &a+1:下一数组的首地址,即(int)&a+4*sizeof(int) ,ptr 等效于  &a[4]
  4. printf("%d",*(ptr-1));//ptr-1 就  等效于   &a[3]  ,加上* 取内容,那么结果就是 4
复制代码



回复

使用道具 举报

 楼主| 发表于 2013-11-20 00:29:41 | 显示全部楼层

昨天的题目,大家可以看看结果:

【每日一题讲解】指针操作的问题 - 软件设计区 - 野火初学123论坛 http://firebbs.cn/forum.php?mod=viewthread&tid=1134

ttttttt.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 20:20 , Processed in 0.061899 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表