Linux小组面试题浅尝

作者: 肆意木 | 来源:发表于2017-05-17 09:38 被阅读152次

    今天上Liunx实验课,查资料时突然看到了西邮Liunx面试题,比较好奇,就打算看看。
    <h1>一</h1>
    分析下面程序的输出:

    int main(int argc, char *argv[])
    {
    int t = 4;
    printf("%lu\n", sizeof(t--));
    printf("%lu\n", sizeof("ab c\nt\012\xa1*2"));
    return 0;
    }
    

    分析:
    转义字符“%lu”,对整型指定长整型long;"\n"只是换行,sizeof()是数据类型长度,t是用int定义,那长度就应该是4,所以它应该首先输出4;
    根据上面分析可以知道第二行输出只需要计算“ab c\nt\012\xa12”的字节数:“ab c\nt\012\xal2" 存贮空间字节数:a、b、'0'、c、\n、t、\012、\xa1、*、2、\0; 共11字节数,所以应该输出11.
    敲代码运行:

    test.png

    <h1>二</h1>
    分析下面程序的输出:

    #include<stdio.h>
    int main(int argc,char *argv[]){
            int a=10,b=20,c=30;
            printf("%d %d\n",b=b*c,c=c*2);
            printf("%d\n",printf("%d",a+b+c));
            return 0;
    }
    

    分析:
    第一次输出时,它会先进行运算,c=60,所以b=1200;
    第二次输出,输出两次1270。
    敲代码运行:

    test.png

    额....为什么和想的不一样呢?这个4是哪里输出的呢?为了测试我在第二次的两次输出前加了注释:

    printf("test1:%d\n",printf("test2:%d",a+b+c));
    

    运行程序:


    test.png

    可以看到第二次的输出在前面输出的是a+b+c的值,那第一次的输出怎么变成10了呢?我们是在加了“test2:”然后它就变大,加的正好是6个字符,然后它就增大6,由此可以推出它的输出是和“test2:%d”有关,那和后面的有关吗?

    printf("test1:%d\n",printf("test2:%d\n",a+b+c));
    

    输出(添加换行符让代码看起来更清楚):

    1200 60
    test2:1270
    test1:11
    

    然后修改后面代码:

    printf("test1:%d\n",printf("test2:%d\n",b+c));
    

    输出:

    1200 60
    test2:1260
    test1:11
    

    由此可见,第一次的printf是和后面printf的字符长度有关,具体是为什么我搜了一下谷歌,都比较模糊,没有明白。


    (下课了,剩下的题下次有机会再尝试)

    相关文章

      网友评论

        本文标题:Linux小组面试题浅尝

        本文链接:https://www.haomeiwen.com/subject/nyhrxxtx.html