分配处理方式不同的值

时间:2011-09-20 13:49:16

标签: c

我有这个片段:

#include <stdio.h>
#include<conio.h>

void main() {
    int x = 10/0;
    printf("%d", x);
    getch();
}

以上输出为10

但如果我这样做:

#include<stdio.h>
#include<conio.h>

void main() {
    int x = 10/2;
    printf("%d", x);
    getch();
}

输出为5。 为什么呢?

我正在使用TurboC++ Windows 7使用DosBox编译器。

另外,如果我这样做:

#include<stdio.h>
#include<conio.h>
void main(){
    int  x=10;
    x=x/0;    //now it would not compile and gives error
}

3 个答案:

答案 0 :(得分:4)

  

10/0打印10

除以零是Undefined Behaviour(*)。任何事情都可能发生。如果你很幸运,电脑会打印一些非常意想不到的东西,迫使你纠正编程错误;如果你运气不好,很长一段时间都不会注意到这个错误。

  

10/2打印5

这是对的。 10除以25

(*)C99 Standard说:

  

6.5.5 / 5
  ...
  ...如果第二个操作数的值为零,则行为未定义。

答案 1 :(得分:3)

除以零是未定义的行为,因此允许任何结果 - 它可能会崩溃或编译器可能拒绝编译该代码(Visual C ++ 10会这样做)。将10乘以5得到2,正如您通常所期望的那样。

答案 2 :(得分:2)

因为在基本算术10/2=5