首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

发现的一个C++有关问题

2012-10-18 
发现的一个C++问题(1)char s[5], *b, cs[0] 2s[1] 3b scout*bendlc *(b++)coutc

发现的一个C++问题
(1)char s[5], *b, c;  
  s[0] = '2';
  s[1] = '3';
  b = s;
  cout<<*b<<endl;
  c = *(b++);
  cout<<c<<endl;
发现执行出来后都是2,以为()这种优先级是最高的,但是怎么先把*b赋值咯,然后再++呢,我用的Dev-c++4.9,来问问其中的原因啊。

[解决办法]
表达式 b++ 的值 是b 执行之后b会后移一位
*(b++) == *b,b+=1
[解决办法]
*(++b);//'3'

最好写成
++b;
*b;
[解决办法]
这种问题看置顶帖子:
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?4938
[解决办法]
lz的疑惑肯定是第二个输出是‘2’,小弟来解释一下;
其实所有的操作符运行都可以看做是一次函数调用,对于基本类型,譬如int,doubule,char,pointer,这些类型所支持的操作符函数调用,c++已经内置实现,但本质上都是函数调用;
++操作符自然不例外,这个函数调用,他的功能呢,就是把原始值自增一次,但其实他的返回值却是原始值没有自增之前的值,所以与你有没有括号是没有关系的,关键是函数的返回值就是没有自增之前的值;

热点排行