经典面试题(一)

来源:互联网 发布:iphone蓝牙传输软件 编辑:程序博客网 时间:2024/05/17 21:46

题目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;}

运行结果:
这里写图片描述

3 0
原创粉丝点击