发一个简单的C程序,大家觉得结果是什么呢
本帖最后由 xiaoyigechaos 于 2014-8-16 19:05 编辑int c=9,d=0;
c=(c++)%5;
d=c;
问d最后的结果是几
标准C编译器下 是4吧 0?4? 0 5,c++先用c的值,再执行 c++ 谢冲 发表于 2014-8-16 19:37
5,c++先用c的值,再执行 c++
有可能吗? 0 advarx21ic 发表于 2014-8-16 19:56
有可能吗?
有括号不是先执行括号里面的吗 0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5 这种问题没意义 是4,算了一下 http://www.dlifep.com/?p=338 上学期学计算机语言的时候 查了些资料 写了上面一篇博客 希望对楼主有帮助 问个问题,什么是“标准C编译器”? gcc 4.9.0编译结果,编译器会警告:
test3.c:6:7: 警告:‘c’上的运算结果可能是未定义的 [-Wsequence-point]
c = (c++)%5;
^
执行结果是4,如10L所说一样,讨论起来没有意义,可能换VS编译又是一种结果了。 根本就没有所谓的“标准C编译器”,楼主玩这个就是觉得脑细胞太闲了吧。 结果和编译器有关 本帖最后由 青春从未醒 于 2014-8-16 20:54 编辑
我用gcc4.7结果也是4 renpeng009 发表于 2014-8-16 20:39
我擦。。。你竟然还在纠结这个问题。。。
{:lol:} 没有纠结,我已经理解饿了,虽然这样的语句没什么意义,但确实是知识点所在,虽然很多时候是用不上的 tennokoe 发表于 2014-8-16 20:44
结果和编译器有关
对所以我说标准C用keil编译 结果是1没想出来是怎么玩的 想起来了
int c=9;
c=(c++)%5;
这是考察 c++ 与++c的问题,区别在于c++是i先不自加,在语句完后自加,++C先自加;
所以此时有伴部分(C++)%5就是相当于9%5,结果是4 4.这个也只能考试和面试用 abutter 发表于 2014-8-16 20:29
问个问题,什么是“标准C编译器”?
应该把编译器去掉,是吧。就是ANSI C 青春从未醒 发表于 2014-8-16 20:53
想起来了
int c=9;
c=(c++)%5;
问题是,它还需要再赋值到“C”,如何解释? 5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支持比较完整。回头用CLang试一下。 wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...
这里的括号 有没有是不是一样的呀
先执行这个c%5=4然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c=4
是不是这样呢
书上说,前缀和后缀形式的增值操作符都复制一份变量值得拷贝,意思好像是 这里使用的c++和c没什么关系了 wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...
“然后c自增”,然后呢?还有一条指令需要执行d=c,求的d值。这个真的好糊涂。
MDK仿真结果是4,它好像不理会“C自增”了。 一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也不用担心在面试或者考试中遇到这种题,遇到这种题直接骂他SB他都不敢放屁。 本帖最后由 xiaoyigechaos 于 2014-8-16 21:28 编辑
lcofjp 发表于 2014-8-16 21:24
一群砖家居然能讨论的如火如荼,我只能说呵呵了。想起了一个坛友发的贴,越是半瓶子水越能晃悠。
楼主你也 ...
我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5
这个问题没有意义
这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
如果这些都没有作用,那有什么意义?
不多说,上图!
attach://212802.png
attach://212803.png
attach://212804.png xiaoyigechaos 发表于 2014-8-16 21:27
我真的就遇到了这个问题,笔试题,针对linux系统下的一套软件题,选项有四个 0 1 4 5
...
我只能告诉你不必在意。中国人出的书上错误百出太正常了。我看过一些二级辅导习题什么的,错误多了去了。当然我这计算机专业是不考二级的。 wshtyr 发表于 2014-8-16 21:30
这个问题没有意义
这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
确实没有意义,应该避免出现这样的代码 这个例子告诉我们,以后写程序不要用这种写法{:lol:} 这种写法真的不好说哦,但是从软件测评和开发角度来看++这类型的运算符是不允许轻易出现的!以前的Linux系统和驱动开发都是严格受限的,不允许出现类似的运算! wshtyr 发表于 2014-8-16 21:30
这个问题没有意义
这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
这位大侠,满电脑都是C啊,佩服佩服。{:handshake:} 这毫无意义, 凡是这样写代码的, 都应该开除
Keep It Simple and Stupid, KISS
{:mad:} 看到第一眼,就想到这是序列点问题吧,结果是未定义的吧 是5,应该是不会错的。下次写程序还是要注意,最好是分开写; 本帖最后由 duanll 于 2014-8-17 12:33 编辑
楼主闲得慌啊。。。 wye11083 发表于 2014-8-16 21:10
5。按照C语言标准,c首先赋值9%5=4,然后c自增=5。VC2010编译结果为5。VC2010除了不支持C99外,其它特性支 ...
支持!
不过看这类问题,就感觉在浪费时间,。 weijia 发表于 2014-8-16 20:07
0吧,得5是不可能的,就算你说它后面再++,也是10啊,怎么可能是5
怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;
d=c; iquer 发表于 2014-8-17 20:07
怎么会不是5?语句的执行顺序应该是:
c=c%5;
c++;
wshtyr大侠不是把三种编译环境的结果都贴出来了吗?为什么不不劳而获呢? xiaoyigechaos 发表于 2014-8-16 21:18
这里的括号 有没有是不是一样的呀
先执行这个c%5=4然后 把执行c=c+1 这是c是10
再然后执行赋值操作,c ...
C标准中,++操作符是在当前语句中执行完毕之后再执行的,不是在一开始执行的。 4。c++中的++在赋值之前发生。可以看一下汇编。 wshtyr 发表于 2014-8-16 21:30
这个问题没有意义
这么写的目的是什么?减少源文件的大小?还是减少可执行代码的大小?还是增加可读性?
呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一样,最后无语,不改了。 答案应该是4 TC执行结果:5
C++两边括号去掉,结果一样 C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器{:lol:} 有意思{:smile:} xiaoyigechaos 发表于 2014-8-18 18:19
C和指针是这么说的,这道面试题最后能得出的结论是什么呢,难道是该面试者可以被分类为哪个编译器...
lcofjp大侠不是告诉你了吧,可以骂面试者神经病。{:lol:}
不过楼主以权威文档表述了这个命题为无解。
哈哈,可惜没人面试我,否则我也可以充满自信地骂他脑袋进水! 结果应当为4,但是大多数程序员不这么使用,程序会比较不好阅读,还不如多写一行,看起来也直观,但是有些公司面试就会考这些偏的东西,如运算符的优先级等等。 楼主的答案其实不重要,按照标准C的语法书对照看下即可明白。
重要的是总是写这种可读性很差的代码,除了炫耀自己的语言功力以外,对代码的后续维护和差错等应用,一点好处都没有,那是给自己和后继者挖坑的节奏{:titter:} csmjmcc 发表于 2014-8-18 19:34
lcofjp大侠不是告诉你了吧,可以骂面试者神经病。
不过楼主以权威文档表述了这个命题为无解。
哈 ...
之前看书没那么认真,这道面试题让我重新注意了一下书里面的细节。算是有所收获
如果提前把这个细节注意到了,在笔试题上注明一下书里面是这么给出的答案,不知道会是什么结果 {:lol:}
感觉是1 wye11083 发表于 2014-8-18 12:42
呵呵。这个还是好的。我当年改过一个算法,J8的没有一行不嵌套个十几个++,不管怎样改,结果都跟原来不一 ...
牵一发不明原因的动全身,换个编译器就不一样,我这种有点强迫症的是不能忍的{:lol:}
对于这种情况,首先我会尝试看懂算法,然后把那个纠结的部分用正常的语言替换掉;如果实在看不懂,反汇编也要知道它是按照什么顺序算的。何必呢,要效率就直接汇编,这么整给后人留坑 C缺陷与陷阱 受教了 很少有人这么写吧
页:
[1]