欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

经典面试题(一)

程序员文章站 2022-05-05 21:57:57
...

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

运行结果:
经典面试题(一)