Linux小组面试题浅尝

今天上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的字符长度有关,具体是为什么我搜了一下谷歌,都比较模糊,没有明白。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者...
    保川阅读 6,088评论 1 13
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,846评论 0 4
  • 史上最全的iOS面试题及答案 迷途的羔羊--专为路痴量身打造的品牌。史上最精准的定位。想迷路都难!闪电更新中......
    南虞阅读 1,642评论 0 8
  • #import和#include的区别 @class? @class一般用于头文件中需要声明该类的某个实例变量的时...
    sellse阅读 367评论 0 2
  • 西叶的胳膊肘支撑着脑袋,无聊地张望着。眯着眼细细观察往来的人群,只盼着看出哪一个与众不同的人有着一身祥瑞之气,便待...
    明公子阅读 349评论 0 1

友情链接更多精彩内容