新问题啊, 很基本的C, 但却很晕的...

alloutoflove 2007-09-13 05:24:36
今天被这个问题搞晕了. 代码如下:
char *buf = "123456";
char b;
b = *(buf++ );
问题是b的值是多少?

想当然地以为b应该等于2,不过我发现事实上错了, 在VC6/VC2005/bcb6的编译器得出的结果都是1.
意思就是
b = *( buf++ );

buf++;
b = *buf;
并不一样...

请问一下有没有什么依据可查, 为什么编译器要这样?

...全文
108 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
alloutoflove 2007-09-14
  • 打赏
  • 举报
回复
我知道楼上所说的道理, 可能是我理解不太清楚吧, 所谓的先参与运算, 就是指不管是否有括号, 先参与本条语句的运算, 并不是按我想像的括号中是一条语句...
额....结帖吧..
n27741 2007-09-14
  • 打赏
  • 举报
回复
还是帮你复习一下吧 我也是翻了一下书的

int i = 0;

int j = i++; //j = 0

j = ++i; //j = 2

i++ 是先参与运算 然后再自增

++i 是先自增 然后再参与运算

just so so :)
n27741 2007-09-14
  • 打赏
  • 举报
回复
char *buf = "1234";
char b ;
b=*(++buf);
ShowMessage(b);

这样写就没问题了

++buf 是先移动指针 然后再取值

buf++ 是先取值 再移动指针
kmfangxun 2007-09-13
  • 打赏
  • 举报
回复
//-----------------------------
b = *(buf++ );
等价于
b=*buf; //先赋值
buf=buf+1; //后加
//-----------------------------------------------------------------------------
如果
b = *(++buf );
等价于
buf=buf+1; //先加
b=*buf; //后赋值
//-----------------------------------------------------------------------------

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧