题目1:
对于下面的代码,下面说法正确的是:
A:main函数中a是一个未定义的值
B:main函数中a的值是1
C:编译器不运行这样做
D:main函数中a的值是0
#include <stdio.h>
int a = 1;
int main()
{
int a = a;
printf("%d\n", a);
return 0;
}
答案:A
PS:
这段代码在VS2005中编译运行的情况是:编译正确(但是有警告,提示a是未定义的变量,运行时如图所示,也指明了a是未定义的变量)
在VS2013中,直接在编译的时候就报错,提示说a是没有定义的变量,如图:
综上所述:尽管不同版本的编译器的警告的级别不同,但是它们同样指向了一点,那就是a是一个没有定义的变量,不能使用。因为在main函数中的a已经不是main函数外面的那个a了,它已经重新定义了,但是它的值不是1,而是一个未定义的值。
第二题:
下面从1-7的7个printf打印的x的值分别是多少?(先不要看答案,自己算算)
#include <stdio.h>
int main()
{
int x = 2, y, z;
x *= (y = z = 5);
printf("第一个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
z = 3;
x == (y = z);
printf("第二个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
x = (y == z);
printf("第三个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
x = (y & z);
printf("第四个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
x = (y && z);
printf("第五个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
y = 4;
x = (y | z);
printf("第六个输出:\n");
printf("x=%d\n", x);
printf("----------------------------------我是分割线------------------------------------");
x = (y || z);
printf("第七个输出:\n");
printf("x=%d\n", x);
return 0;
}
运行结果: