经典面试题(一)

题目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
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值