C语言有点不理解的地方,求真相

Boyce_Gao 2010-05-25 06:57:01
#include<stdio.h>
int main()
{
int num[] = {0,1,2,3,4};
int k = 2;
printf("%d %d\n",num[k++],num[k++]);
return 0;
}

为什么输出 2 2 ?

谢谢!
...全文
256 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
Boyce_Gao 2010-05-28
  • 打赏
  • 举报
回复
谢谢,突然想到这个,运行后看见跟想到的不同
andyqin1989 2010-05-26
  • 打赏
  • 举报
回复
像这样的问题,自己明白就行了,根本不用写出有歧义的代码。
liutengfeigo 2010-05-26
  • 打赏
  • 举报
回复
iasky PHP的大牛。跑这里来了。。。呵呵~~
yuanzhang198711 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 nbda1121440 的回复:]

为什么大家都喜欢将一些有歧义的语句拿出来问呢?
其实这些题目本身就不是很好的,
我的老师都不让我们这么这么写的
[/Quote]
确实,代码越简洁明了越好,目的一是要让看懂,更要让编译器看懂。
cffa_edfe 2010-05-26
  • 打赏
  • 举报
回复
___不推荐__
这种代码除了考试用_没有什么意义___何况不同编译器编译的结构还不一样
它损失了代码的可读性和可移植性__
c_song 2010-05-26
  • 打赏
  • 举报
回复
题目本身不重要,
内涵重要点

就是要我们理解,运算的优先等级,运算的次序

尤其是++ -- 一类的东西,在程序中运用超多

yangyunzhao 2010-05-26
  • 打赏
  • 举报
回复
标准里面未定义的东西,由各个编译器自行实现,根本没有必要讨论。
建鼎呓语 2010-05-26
  • 打赏
  • 举报
回复
一般来说,在一个表达式中,++在前,就先自加,再运算;++在后,就先运算,再自加。

不建议,在调用函数时,对参数使用自加自减,根据编译器不同,结果会有出入。
  • 打赏
  • 举报
回复
实际上k的值是在整个printf语句结束后才一次性自加两次的,所以在printf语句中k的值没有变化
yustinyxl 2010-05-26
  • 打赏
  • 举报
回复
编译器的问题.如何你使用其他编辑器也会有其他的结果.只要你懂的自加的先与后就可以了。
ArtiFly2000 2010-05-26
  • 打赏
  • 举报
回复
不要再一个表达式中,多次去改变一个变量的值
结果未定义,或者说结果由具体实现定义
golduty2 2010-05-25
  • 打赏
  • 举报
回复
printf 貌似跟他的输出计算方式也有关 好像是压栈式的 记不清了 不过你可以跟到更底层 去看看 mark 学习
yu103 2010-05-25
  • 打赏
  • 举报
回复
跟编译器执行顺序有关,答案应该是多种多样的
qq120848369 2010-05-25
  • 打赏
  • 举报
回复
这个地方很特殊,编译器有关。
Zhao01081122Heng 2010-05-25
  • 打赏
  • 举报
回复
k++是先使用再再自加 ++k先加再使用
周靖峰 2010-05-25
  • 打赏
  • 举报
回复
为什么大家都喜欢将一些有歧义的语句拿出来问呢?
其实这些题目本身就不是很好的,
我的老师都不让我们这么写的
nicejack 2010-05-25
  • 打赏
  • 举报
回复
呵呵!我开始学的时候老师叫我把k++的值赋值给一个变量啊变量的值就是表达式的值啊!其实是编译器在编译的时候先把值赋给那个变量再是K的值加一啊
gyjdk0601 2010-05-25
  • 打赏
  • 举报
回复
学习了!
zhaiershuaixu 2010-05-25
  • 打赏
  • 举报
回复
与编译器有关,但是在vc++6.0中输出的是2,2。
hetuo 2010-05-25
  • 打赏
  • 举报
回复
编译器?
加载更多回复(13)

69,373

社区成员

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

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