搜索
查看: 4372|回复: 18
打印 上一主题 下一主题

不上机说出以下代码的运行结果

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-11 12:00:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
\#include <stdio.h>
#include <conio.h>
int main()
{
int a=5,b=4;
    printf("最后输出的结果是%d,但a的值是%d",(a=2*8,a/4));
    a=2*8,a/4;
    printf("\na的值是%d",a);
    printf("\na与b比较的结果=%d",a==b);
    getch();
return 0;
}

最佳答案

查看完整内容

好吧是这样子的 根据c99标准 (a=2*8,a/4) 这样一个表达式,逗号左边先进行计算,然后把值舍弃掉,然后计算冒号右边的a/4,得到一个int型的4 (a=2*8,a/4)是一个表达式,printf处理的时候这个值输出到第一个%d, 而第二个%d没有对应值,根据c99标准,这是一个未定义行为,换而言之,编译器怎么处理都是正确的 a=2*8,a/4; 冒号右边的a/4不会影响a的值,所以a还是16 最后一个,a==b为假,转换为%d输出,就是0
沙发
发表于 2013-2-11 12:00:30 | 只看该作者
好吧是这样子的

根据c99标准
(a=2*8,a/4) 这样一个表达式,逗号左边先进行计算,然后把值舍弃掉,然后计算冒号右边的a/4,得到一个int型的4
(a=2*8,a/4)是一个表达式,printf处理的时候这个值输出到第一个%d,
而第二个%d没有对应值,根据c99标准,这是一个未定义行为,换而言之,编译器怎么处理都是正确的

a=2*8,a/4;
冒号右边的a/4不会影响a的值,所以a还是16

最后一个,a==b为假,转换为%d输出,就是0
板凳
 楼主| 发表于 2013-2-11 12:07:39 | 只看该作者
而且每次我用啊哈c运行的结果都不一样
地板
发表于 2013-2-11 13:26:50 | 只看该作者
然后安越 发表于 2013-2-11 12:07
而且每次我用啊哈c运行的结果都不一样

楼主这行  printf("最后输出的结果是%d,但a的值是%d",(a=2*8,a/4));里的a=2*8,a/4为什么要一个小括号呀,不懂?求解...
5#
发表于 2013-2-11 14:32:15 | 只看该作者
如果去掉括号,永远都为假

QQ截图20130211134045.png (6.61 KB, 下载次数: 12)

QQ截图20130211134045.png
6#
 楼主| 发表于 2013-2-11 14:33:41 | 只看该作者
月光疾风 发表于 2013-2-11 13:26
楼主这行  printf("最后输出的结果是%d,但a的值是%d",(a=2*8,a/4));里的a=2*8,a/4为什么要一个小括号呀, ...

我也不懂啊,书上是这么写的(不是啊哈c)
7#
 楼主| 发表于 2013-2-11 14:33:49 | 只看该作者
月光疾风 发表于 2013-2-11 13:26
楼主这行  printf("最后输出的结果是%d,但a的值是%d",(a=2*8,a/4));里的a=2*8,a/4为什么要一个小括号呀, ...

我也不懂啊,书上是这么写的(不是啊哈c)
8#
发表于 2013-2-11 14:39:25 | 只看该作者
然后安越 发表于 2013-2-11 14:33
我也不懂啊,书上是这么写的(不是啊哈c)

什么书,书名发下,还有就是第几页
9#
发表于 2013-2-11 14:47:02 | 只看该作者
看样子是用了些未定义行为……
10#
发表于 2013-2-11 14:49:49 | 只看该作者
本帖最后由 月光疾风 于 2013-2-11 14:51 编辑

[mw_shl_code=c,true]/*如果去掉括号*/
#include <stdio.h>
#include <conio.h>
int main()
{
    int a=5,b=4;
    printf("最后输出的结果是%d,但a的值是%d",a=2*8,a/4);   
    a=2*8,a/4;    /*a=16  a/4=1 您上面用的是整型,所以a/4这的值为1*/
    printf("\na的值是%d",a);  /*您的第二次申明a的值为16*/
    printf("\na与b比较的结果=%d",a==b);  /*16和4是永远不可能等于的,所以为假*/
    getch();
return 0;
}
[/mw_shl_code]
括号难到在conio.h中有定义
11#
发表于 2013-2-11 14:53:12 | 只看该作者
月光疾风 发表于 2013-2-11 14:49
[mw_shl_code=c,true]/*如果去掉括号*/
#include
#include

conio.h是为了用getch
12#
 楼主| 发表于 2013-2-11 15:56:10 | 只看该作者
月光疾风 发表于 2013-2-11 14:39
什么书,书名发下,还有就是第几页

零基础学C语言   p117
13#
发表于 2013-2-11 16:30:12 | 只看该作者
rosynirvana 发表于 2013-2-11 16:00
好吧是这样子的

根据c99标准

因为少了个参数,语法没有错误,编译器就产生了一个垃圾值 ,是这样么
14#
发表于 2013-2-11 16:47:08 | 只看该作者
月光疾风 发表于 2013-2-11 16:30
因为少了个参数,语法没有错误,编译器就产生了一个垃圾值 ,是这样么

大概就是这意思吧

具体怎么处理的要看中间产生的汇编文件
15#
发表于 2013-2-12 14:08:54 | 只看该作者
a=2*8,a/4;
a/4是想干嘛?
若想要让a的值变为4,应该为
a=2*8,a=a/4;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表