百戰c++(9)

12 . 下面的代碼輸出是什么,為什么?

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) puts("> 6") : puts("<= 6");

}

這個問題測試你是否懂得C語言中的整數自動轉換原則,我發現有些開發者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是“>6”。原因是當表達式中存在有符號類型和無符號類型時所有的操作數都自動轉換為無符號類型。 因此-20變成了一個非常大的正整數,所以該表達式計算出的結果大于6。這一點對于應當頻繁用到無符號數據類型的嵌入式系統來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。

13. 評價下面的代碼片斷:

unsigned int zero = 0;

unsigned int compzero = 0xFFFF;

對于一個int型不是16位的處理器為說,上面的代碼是不正確的。應編寫如下:

unsigned int compzero = ~0;

這一問題真正能揭露出應試者是否懂得處理器字長的重要性。在我的經驗里,好的嵌入式程序員非常準確地明白硬件的細節和它的局限,然而PC機程序往往把硬件作為一個無法避免的煩惱。

到了這個階段,應試者或者完全垂頭喪氣了或者信心滿滿志在必得。如果顯然應試者不是很好,那么這個測試就在這里結束了。但如果顯然應試者做得不錯,那么我就扔出下面的追加問題,這些問題是比較難的,我想僅僅非常優秀的應試者能做得不錯。提出這些問題,我希望更多看到應試者應付問題的方法,而不是答案。不管如何,你就當是這個娛樂吧…

動態內存分配(Dynamic memory allocation)

14. 盡管不像非嵌入式計算機那么常見,嵌入式系統還是有從堆(heap)中動態分配內存的過程的。那么嵌入式系統中,動態分配內存可能發生的問題是什么?

這里,我期望應試者能提到內存碎片,碎片收集的問題,變量的持行時間等等。這個主題已經在ESP雜志中被廣泛地討論過了(主要是 P.J. Plauger, 他的解釋遠遠超過我這里能提到的任何解釋),所有回過頭看一下這些雜志吧!讓應試者進入一種虛假的安全感覺后,我拿出這么一個小節目:下面的代碼片段的輸出是什么,為什么?

char *ptr;

if ((ptr = (char *)malloc(0)) == NULL)

puts("Got a null pointer");

else

puts("Got a valid pointer");

這是一個有趣的問題。最近在我的一個同事不經意把0值傳給了函數malloc,得到了一個合法的指針之后,我才想到這個問題。這就是上面的代碼,該代碼的輸出是“Got a valid pointer”。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫例程這樣做是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。

Typedef

15. Typedef 在C語言中頻繁用以聲明一個已經存在的數據類型的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子:

#define dPS struct s *

typedef struct s * tPS;

以上兩種情況的意圖都是要定義dPS 和 tPS 作為一個指向結構s指針。哪種方法更好呢?(如果有的話)為什么?

這是一個非常微妙的問題,任何人答對這個問題(正當的原因)是應當被恭喜的。答案是:typedef更好。思考下面的例子:

dPS p1,p2;

tPS p3,p4;

第一個擴展為

struct s * p1, p2;

上面的代碼定義p1為一個指向結構的指,p2為一個實際的結構,這也許不是你想要的。第二個例子正確地定義了p3 和p4 兩個指針。

晦澀的語法

16. C語言同意一些令人震驚的結構,下面的結構是合法的嗎,如果是它做些什么?

int a = 5, b = 7, c;

c = a+++b;

這個問題將做為這個測驗的一個愉快的結尾。不管你相不相信,上面的例子是完全合乎語法的。問題是編譯器如何處理它?水平不高的編譯作者實際上會爭論這個問題,根據最處理原則,編譯器應當能處理盡可能所有合法的用法。因此,上面的代碼被處理成:

c = a++ + b;

因此, 這段代碼持行后a = 6, b = 7, c = 12。

如果你知道答案,或猜出正確答案,做得好。如果你不知道答案,我也不把這個當作問題。我發現這個問題的最大好處是:這是一個關于代碼編寫風格,代碼的可讀性,代碼的可修改性的好的話題

What will print out?

main()

{

char *p1=“name”;

char *p2;

p2=(char*)malloc(20);

memset (p2, 0, 20);

while(*p2++ = *p1++);

printf(“%sn”,p2);

}

Answer:empty string.

What will be printed as the result of the operation below:

main()

{

int x=20,y=35;

x=y++ + x++;

y= ++y + ++x;

printf(“%d%dn”,x,y);

}

Answer : 5794

What will be printed as the result of the operation below:

main()

{

int x=5;

printf(“%d,%d,%dn”,x,x< <2,x>>2);

}

Answer: 5,20,1

What will be printed as the result of the operation below:

#define swap(a,b) a=a+b;b=a-b;a=a-b;

void main()

{

int x=5, y=10;

swap (x,y);

printf(“%d %dn”,x,y);

swap2(x,y);

printf(“%d %dn”,x,y);

}

int swap2(int a, int b)

{

int temp;

temp=a;

b=a;

a=temp;

return 0;

}

Answer: 10, 5

10, 5

What will be printed as the result of the operation below:

main()

{

char *ptr = ” Cisco Systems”;

*ptr++; printf(“%sn”,ptr);

ptr++;

printf(“%sn”,ptr);

}

Answer:Cisco Systems

isco systems

What will be printed as the result of the operation below:

main()

{

char s1[]=“Cisco”;

char s2[]= “systems”;

printf(“%s”,s1);

}

Answer: Cisco

What will be printed as the result of the operation below:

main()

{

char *p1;

char *p2;

p1=(char *)malloc(25);

p2=(char *)malloc(25);

strcpy(p1,”Cisco”);

strcpy(p2,“systems”);

strcat(p1,p2);

printf(“%s”,p1);

}

Answer: Ciscosystems

The following variable is available in file1.c, who can access it?:

static int average;

Answer: all the functions in the file1.c can access the variable.

WHat will be the result of the following code?

#define TRUE 0 // some code

while(TRUE)

{

// some code

}

Answer: This will not go into the loop as TRUE is defined as 0.

What will be printed as the result of the operation below:

int x;

int modifyvalue()

{

return(x+=10);

}

int changevalue(int x)

{

return(x+=1);

}

void main()

{

int x=10;

x++;

changevalue(x);

x++;

modifyvalue();

printf("First output:%dn",x);

x++;

changevalue(x);

printf("Second output:%dn",x);

modifyvalue();

printf("Third output:%dn",x);

}

Answer: 12 , 13 , 13

What will be printed as the result of the operation below:

main()

{

int x=10, y=15;

x = x++;

y = ++y;

printf(“%d %dn”,x,y);

}

Answer: 11, 16

What will be printed as the result of the operation below:

main()

{

int a=0;

if(a==0)

printf(“Cisco Systemsn”);

printf(“Cisco Systemsn”);

}

Answer: Two lines with “Cisco Systems” will be printed.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443873.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443873.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443873.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基礎的shell編程問題(二)

文章目錄題目一題目描述代碼實現結果驗證關于本題題目二題目描述代碼實現結果測試題目三題目描述代碼實現及結果測試題目四題目描述代碼實現及結果測試題目五題目描述代碼實現及結果測試題目一 題目描述 輸入的命令行參數必須是hello&#xff0c;才會正確顯示&#xff1b;否則…

百戰c++(10)

1.多態類中的虛函數表是Compile-Time&#xff0c;還是Run-Time時建立的? 2.將一個 1M -10M 的文件&#xff0c;逆序存儲到另一個文件&#xff0c;就是前一個文件的最后一個 字符存到新文件的第一個字符&#xff0c;以此類推。 3.main主函數執行完畢后&#xff0c;是否可能會…

Numpy實現酒鬼漫步問題【以及randint()、where()、cumsum()、argmax()的用法詳解】

文章目錄題目描述代碼實現關于本題涉及到的幾個函數randint()where()cumsum()題目拓展題目描述代碼實現題目拓展題目描述代碼實現argmax()題目描述 從前有一個酒鬼&#xff0c;喝醉了行走在一條直線上&#xff0c;每走一步方向是不確定的&#xff08;向前或者向后&#xff09;…

百戰c++(11)

31.找錯 Void test1() { char string[10]; char* str1"0123456789"; strcpy(string, str1); } Void test2() { char string[10], str1[10]; for(I0; I<10;I) { str1[i] a; } strcpy(string, str1); } Void test3(char* str1) { char string[10]; if(st…

搞清axis的含義,這一篇就夠了!

文章目錄axis的含義旁門左道式理解二維數組中的axis三維數組中的axis正規理解axis的含義 在自己分析之前先擺上官方關于多維數組中axis的值的定義&#xff1a; axis 0&#xff0c;表示第一個維度 axis 1&#xff0c;表示第二個維度 axis -1&#xff0c;表示最后一個維度…

百戰c++(12)

36. 定義 int **a[3][4], 則變量占有的內存空間為&#xff1a;_____ 37. 編寫一個函數&#xff0c;要求輸入年月日時分秒&#xff0c;輸出該年月日時分秒的下一秒。如輸入2004年12月31日23時59分59秒&#xff0c;則輸出2005年1月1日0時0分0秒。 38.寫一個函數&#xff0c;判…

Struts2.3.5+Hibernate3+Spring3.1基于注解實現的多文件上傳,下載

Struts2.3.5Hibernate3Spring3.1基于注解實現的的多文件上傳&#xff0c;下載,這里是上傳文件到數據庫中&#xff0c;上傳控件可以增加和刪除&#xff0c;有需要的朋友可以看看。 以下是源碼下載地址&#xff1a;http://www.zuidaima.com/share/1639672872438784.htm jar包的下…

Pandas索引操作及高級索引——reindex()方法

文章目錄索引對象多個數據結構之間共享index類對象is與的區別重置索引——reindex()索引操作Series的索引操作切片不連續索引布爾型索引DataFrame的索引操作獲取不連續的Series對象切片Pandas庫中的操作索引方法索引對象 Index類對象&#xff0c;該對象不可以進行修改&#xf…

【精品計劃1】動態規劃入門到熟悉,看不懂來打我啊

持續更新。。。。。。 2.1斐波那契系列問題 2.2矩陣系列問題 2.3跳躍系列問題 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些變形選講 2.1斐波那契系列問題 在數學上&#xff0c;斐波納契數列以如下被以遞歸的方法定義&#xff1a;F(0)0&#xff0c;F(1)1, F(n)F(n-1)…

Pandas數據排序——【按索引排序sort_index()方法、按值排序sort_value()方法】

文章目錄按索引排序——sort_index()對Series排序對DataFrame排序按值排序——sort_value()對Series進行排序對DataFrame進行排序按索引排序——sort_index() sort_index(axis0, levelNone, ascendingTrue, inplaceFalse, kind‘quicksort’, na_position‘last’,sort_remaini…

【大總結2】大學兩年,寫了這篇幾十萬字的干貨總結

本文是我大學兩年知識的總結。涵蓋數據結構、算法、語言基礎、操作系統、關系數據庫、NOSQL、網絡/前端/項目基礎知識、安全和測試、框架的學習、中間件和工具、設計模式和框架原理、我推薦的資料、我的建議 本篇文章應該算是Java后端開發技術棧的&#xff0c;但是大部分是基礎…

Pandas對象的層次化索引——【from_tuples()、from_arrays()、from_product()、swaplevel()、sort_index()、sort_values()】

文章目錄層次化索引的概念層次化索引的創建使用嵌套列表的方式構造層次化索引對象Series對象DataFrame對象通過MultiIndex類的方法構建層次化索引通過from_tuples()方法創建MultiIndex對象通過from_arrays()方法創建MultiIndex對象通過from_product()方法創建MultiIndex對象層次…

《這是全網最硬核redis總結,誰贊成,誰反對?》六萬字大合集

我攤牌了&#xff0c;這篇文章&#xff0c;值得99%的人收藏 此文后續會改為粉絲可見&#xff0c;所以喜歡的請提前關注和收藏&#xff0c;不迷路。 最近有五本我喜歡的redis實體新書&#xff0c;想要的去評論&#xff0c;我寫個隨機數抽獎包郵送給你。 那么&#xff0c;準備好…

Python數據預處理之異常值的處理——【自定義的three_sigma()函數、boxplot()方法】

文章目錄基于3σ原則檢測異常值代碼實現測試基于箱型圖檢測異常值異常值的處理基于3σ原則檢測異常值 3σ原則&#xff0c;又稱拉依達準則。是指假設一組檢測數據只含有隨機誤差。對其進行計算處理得到標準偏差&#xff0c;按一定概率確定一個區間&#xff0c;凡是超過這個區間…

那個谷歌的網紅扔雞蛋的題,來看看教科書式的回答

leetcode頂級難題&#xff0c;谷歌面試天天問&#xff0c;來看看吧&#xff0c;帶你來一步一步達到最優解。 谷歌不知道問了多少遍&#xff0c;藍橋杯也出現過&#xff0c;leetcode上是頂級難題&#xff0c;到底是什么題能如此頻繁地出現&#xff1f;我們一探究竟吧。 原題描述…

Python更改數據類型——astype()方法和to_numeric()函數

文章目錄明確指定數據的類型通過dtypes屬性進行查看創建Pandas對象指定數據類型轉換數據類型通過astype()方法強制轉換數據的類型通過to_numeric()函數轉換數據類型明確指定數據的類型 通過dtypes屬性進行查看 import pandas as pddf pd.DataFrame({A: [1, 2, 4],B: [9, -80…

不騙你,沒讀這一篇,你不可能懂二分

上篇文章講動態規劃獲得了80k瀏覽&#xff0c;這次的二分也值得你們一看&#xff0c;這個系列是特別用心寫的&#xff0c;準備出書的哦 動態規劃 3.0 引子 圖書館自習的時候,一女生背著一堆書進閱覽室,結果警報響了,大媽讓女生看是哪本書把警報弄響了&#xff0c;女生把書倒出…

Python之數據合并——【concat()函數、merge()函數、join()方法、combine_first()方法】

文章目錄軸向堆疊數據——concat()函數橫向堆疊與外連接縱向堆疊與內連接主鍵合并數據——merge()函數內連接方式外連接方式左連接方式右連接方式其他根據行索引合并數據——join()方法四種連接方式行索引與列索引重疊合并重疊數據——combine_first()方法軸向堆疊數據——conc…

超硬核!操作系統學霸筆記,考試復習面試全靠它

之后會發布基于基礎知識的大部分算法的模擬代碼合集&#xff0c;敬請關注。 進程基礎 進程的基本概念 程序順序執行的特征&#xff1a; 1&#xff09;順序性&#xff1a;處理機嚴格按照程序所規定的順序執行&#xff0c;每一步操作必須在下一步操作開始前執行 2&#xff09;封…

配置tomcat6.0的HTTPS(單向)

利用JDK自帶的產生證書的工具 生成證書 建立一個腳本文件&#xff0c;內容如下&#xff1a; set SERVER_DN"CNServer, OUshare, Oshare, Lsz, Sgd, CCN" set CLIENT_DN"CNClient, OUshare, Oshare, Lsz, Sgd, CCN" set KS_PASS-storepass changeit set KE…