简单的C问题,但是很怪,大家都来看看!

crystalmoon 2003-10-17 10:30:32
#include <stdio.h>
void main()
{
char k='a';
k=k++;
putchar(k);
}


如此简单的一个程序,在TC2.0环境中的结果是b,在TC/C++3.0环境中却是a,
有哪位大侠知道其中的奥秘?
偶在线等待!
...全文
32 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
liansdan 2003-10-18
  • 打赏
  • 举报
回复
是B呀,没错了
chaonet 2003-10-18
  • 打赏
  • 举报
回复
因该是a吧,理论上感觉是a,
rixwyg 2003-10-18
  • 打赏
  • 举报
回复
这个问题分两个部分。
k=k++;
这个它是先赋值,
又因为“++”是后缀
所以输出的是‘a’
likcy 2003-10-18
  • 打赏
  • 举报
回复
都是B啊
lp1983 2003-10-18
  • 打赏
  • 举报
回复
处理方式不同
lieo007 2003-10-18
  • 打赏
  • 举报
回复
up
liem 2003-10-18
  • 打赏
  • 举报
回复
to crystalmoon(流氓兔)
(k=k)++;
这一代码可以通过编译啊。
赋值表达式返回的是引用,可以作左值。
crystalmoon 2003-10-18
  • 打赏
  • 举报
回复
to Jiangcr81(三水先生):大哥,我是TC/C++3.0环境,并认真的对了两者的原代码,确实在TC2.0环境中的结果是b,在TC/C++3.0环境中却是a的。

to liem(阿明) :按你的说法,可以写成(k=k)++这样的优先级吧,可是好象不能编译通过,偶郁闷啊。
langzi8818 2003-10-18
  • 打赏
  • 举报
回复
我觉得什么都是B。
左到右时,k++先,这时候k变成了b,在赋值给k。
右到左,k赋值给k,就是a赋值给a。然后k自身++,还是b啊
liem 2003-10-18
  • 打赏
  • 举报
回复
几个编译器(TC,TC++,VC,DEVCPP)中输出的结果都是'b'啊。
从理论上讲也是'b'。
k++:先用k值,再++
k=k++:
(1)取k('a')
(2)赋给k(此时k为'a')
(3)k自加(成了'b')
园区宅男 2003-10-18
  • 打赏
  • 举报
回复
TC3.0里也是b
cupidvenus 2003-10-18
  • 打赏
  • 举报
回复
处理方式不同。
TC2.0是k自加1后再赋给等号前面的k
TC/C++3.0是按面向对象进行处理,先是复制一个跟k一样的对象(为叙述方便称这个复制的对象为k',然后k自加1,最后再把k'赋值给等号前面的k
crystalmoon 2003-10-18
  • 打赏
  • 举报
回复
呵呵,这么多了,vc++中和tc2.0确实是b,但tc++3.0中是a的,可能说是b的人tc++3.0的版本吧,大家就不要再说也是b了。
我自己也同意cupidvenus(小鱼儿),zhuixe(竹子) ,huolin(火林)等人的观点。
放分了。
huolin 2003-10-18
  • 打赏
  • 举报
回复
处理方式的顺序是不同的
instigator 2003-10-18
  • 打赏
  • 举报
回复
呼呼
是b
danpianji2002 2003-10-18
  • 打赏
  • 举报
回复
是 b 吧 k++先用k 的值再给 k 加 ,好像相当于

k=k;
k++;

是 b 吧
yaoyang 2003-10-18
  • 打赏
  • 举报
回复
b
slovel 2003-10-18
  • 打赏
  • 举报
回复
是b。没什么好多说得
wenkejiujiu 2003-10-18
  • 打赏
  • 举报
回复
我早已不用tc了
不过在vc和devc++中都是b
我一分钟前才测试过!
liqn 2003-10-18
  • 打赏
  • 举报
回复
同意第一位的观点!

谢谢观看!
加载更多回复(2)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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