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()是數(shù)據類型長度,t是用int定義,那長度就應該是4,所以它應該首先輸出4;
根據上面分析可以知道第二行輸出只需要計算“ab c\nt\012\xa12”的字節(jié)數(shù):“ab c\nt\012\xal2" 存貯空間字節(jié)數(shù):a、b、'0'、c、\n、t、\012、\xa1、*、2、\0; 共11字節(jié)數(shù),所以應該輸出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的字符長度有關,具體是為什么我搜了一下谷歌,都比較模糊,沒有明白。


(下課了,剩下的題下次有機會再嘗試)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network,根據使用者...
    保川閱讀 6,086評論 1 13
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,843評論 0 4
  • 史上最全的iOS面試題及答案 迷途的羔羊--專為路癡量身打造的品牌。史上最精準的定位。想迷路都難!閃電更新中......
    南虞閱讀 1,636評論 0 8
  • #import和#include的區(qū)別 @class? @class一般用于頭文件中需要聲明該類的某個實例變量的時...
    sellse閱讀 365評論 0 2
  • 西葉的胳膊肘支撐著腦袋,無聊地張望著。瞇著眼細細觀察往來的人群,只盼著看出哪一個與眾不同的人有著一身祥瑞之氣,便待...
    明公子閱讀 348評論 0 1

友情鏈接更多精彩內容