Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3878939
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: C/C++

2008-05-11 19:33:20

void  main() 

int arr[]={6,7,8,9,10}; 
       int *ptr=arr; 
*(ptr++)=*(ptr++)+100; 
   printf("%d,%d",*ptr,*(++ptr));
   cout <   cout <
 } 

为什么输出
9,9
106789
*ptr和*(++ptr)怎么可能都是9呢?
还有106为什么没有付给arr[1]呢?
 
======================
 
*(ptr++)=*(ptr++)+100;  相当于*ptr = ptr+100; prt++;prt++;
表示arr[0] = a[0] + 100;
执行两次ptr++后*ptr == a[2]
 
而VC输出是从右至左的顺序  所以先输出*(++prt)即arrr[3]然后再输出*ptr也是arr[3]了
例如上面换成
cout < <*(++ptr) < <*ptr < 则输出98 

 
阅读(1576) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-05-15 19:52:13

测试得出这种写法是不良习惯 因为这个输出是与编译器相关 不同编译器结果不同