CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

笔试题一道

楼主morphymorphy(叔,人家还小啦~~ =_=)2006-11-01 16:54:17 在 C/C++ / C语言 提问

#include   <stdio.h>  
  main()  
  {  
  int   arr[]   =   {6,7,8,9,10};  
  int   *ptr   =   arr;  
  *(ptr++)+=123;  
  printf("%d,%d   ",*ptr,*(++ptr));  
  }  
   
  ~~~~~~~~~~~~~~~~~~~~~~~`  
   
  答案及解释... 问题点数:10、回复次数:14Top

1 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-11-01 16:57:36 得分 0

printf("%d,%d   ",*ptr,*(++ptr));   这句又依赖编译器了,函数参数求值顺序未定,不要在传参的表达式里面改变变量的值Top

2 楼copine()回复于 2006-11-01 17:02:29 得分 0

200,8  
  include   <stdio.h>  
  main()  
  {  
  int   arr[]   =   {6,7,8,9,10};  
  int   *ptr   =   arr;                 //指向数组开始位置  
  *(ptr++)+=123;                   //指向第二个元素并且加上123,7+123=200  
  printf("%d,%d   ",*ptr,*(++ptr));   //输出当前和下一个元素,也就是第二个和第三个  
  }  
  Top

3 楼itoaer(Maxthon2做的太烂)回复于 2006-11-01 17:02:48 得分 10

输出为8,8  
  *(ptr++)+=123;    
  ptr++直到整条语句结束后才生效,因此是把arr[0]加了123,然后ptr移动到arr[1]的位置  
  然后printf("%d,%d",*ptr,   *(++ptr));   从右往左求值,到逗号的时候++ptr生效,因此首先++ptr移动到arr[2],再求*(++ptr)=8,然后求*ptr的时候实际上ptr已经移动到了arr[2]的位置,所以*(ptr)=8  
  整个程序执行后arr的内容是{129,7,8,9,10}Top

4 楼copine()回复于 2006-11-01 17:10:08 得分 0

*(ptr++)+=123;    
  ptr++直到整条语句结束后才生效  
  ===================================  
  括号是用来看的?Top

5 楼andytopxu()回复于 2006-11-01 17:11:24 得分 0

楼上的,注意printf("%d,%d",*ptr,   *(++ptr));   中时候已经求了两次值(++)  
  应该是8,9Top

6 楼morphymorphy(叔,人家还小啦~~ =_=)回复于 2006-11-01 17:12:33 得分 0

*(ptr++)+=123;   与   *(ptr++)=123;  
  导致结果相同的原因??  
  Top

7 楼andytopxu()回复于 2006-11-01 17:12:52 得分 0

晕,是我错了,vc6编译结果是8,8Top

8 楼andytopxu()回复于 2006-11-01 17:13:47 得分 0

期待高人解释Top

9 楼copine()回复于 2006-11-01 17:14:55 得分 0

楼上的,注意printf("%d,%d",*ptr,   *(++ptr));   中时候已经求了两次值(++)  
  ====================================================================  
  哪里有两次,这里的++ptr明明是从第二个移到第三个  
  Top

10 楼andytopxu()回复于 2006-11-01 17:15:39 得分 0

*(ptr++)+=123;    
  ptr++直到整条语句结束后才生效  
  ===================================  
  括号是用来看的?  
   
  -------------------------------------------  
  括号确实是用来看的Top

11 楼copine()回复于 2006-11-01 17:19:11 得分 0

晕,是我错了,vc6编译结果是8,8  
  ==============================  
  我没有运行过,如果是8,8的话那么就是这一句的问题  
  printf("%d,%d   ",  
                *ptr,          
                *(++ptr))//在这里先进行了指针运算,然后才计算两个*(ptr),这里的顺序就不太清楚了。Top

12 楼copine()回复于 2006-11-01 17:20:40 得分 0

最后是把第三个元素输出了两次,说括号是看的的人,把程序改改,输出所有的数组成员看看。Top

13 楼copine()回复于 2006-11-01 18:01:31 得分 0

唉,无语了,孺子不可教!Top

14 楼jinyanfang()回复于 2006-11-01 19:08:15 得分 0

有意思Top

相关问题

关键词

得分解答快速导航

  • 帖主:morphymorphy
  • itoaer

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo