【計算機本科補全計劃】C++牛客網試題習題解析

正文以前

一大早醒來,外面淅淅瀝瀝的雨綿綿的下着,牀鋪真的舒服,可是我也不能就在牀上刷微博看小說吧,因此想起了昨晚下載的牛客網的APP,趕忙掏出個人大寶貝---升級到iOS11的腎(各位,真的建議升級到11,不是我說,速度快了不少,雖然還有很多的bug待修復,可是真的快了好多,並且感受內部的功耗設定都改了,比較耐用了點了。雖然最大的悲劇是變醜了不少 PS:變醜觀點來自個人審美比較好的妹子),而後刷了一套C++的面試題,這些基礎知識很久沒看過了,最近沉迷於算法和數據結構,因此基本大腦大部分地區已經被指針佔領了,C++作的好勉強,後面本身查查補補,總算寫出一份攻略,歡迎品鑑,也請幫我糾正,畢竟我如今是個半吊子。面試

正文

第一題解析: 算法

alp是一個指針數組,含有三個指針,分別指向三個字符串的內存區,那麼alp[1]很天然的就是指向「DEF」這個內存區,而後puts雖然不知道是啥,可是琢磨着應該是把整個連續內存區的都整出來的吧!那麼沒問題,就是D數組

第二題解析:安全

這個代碼其實寫的不是很適合閱讀,應該要有比較好的代碼編寫規範,前後,嵌套順序明顯纔是優秀的!本題的代碼嵌套關係以下圖所示,在if(a>b)與後面的printf("%d\n",d);不存在主從關係,也就是說無論你if(a>b)是否能深刻運行,都會有printf("%d\n",d);的執行,因此這時候就只要考慮if(a>b)可否改變d的值?而且自身有沒有輸出?而後看了下 a>b 這很明顯是不可能的,因此if直接就跳出了,到了後面的printf("%d\n",d);bash

第三題解析:數據結構

這個我不知道啊!!因此只好借用討論區的回答咯。錯了不怪我~~大文件表空間只能包含一個文件,可是文件能夠達到 4G 個數據塊大小。(只能包含一個文件,可是一個文件裏能夠包含多個數據文件??不知道是否是這樣理解)
函數

第四題解析:ui

首先,第一行第二行是字符數組的複製,相似因而一個字符串,而後再第三行進行了一個字符串的操做函數,—strcpy意思就是把字符串整個的複製給ccString1,那麼這個時候ccString1=」No「,並未保留後續的 Page Fault?? 第四句是比較兩個字符串,相等輸出0,不相等輸出1,那麼很顯然的,strcmp輸出的是1,不等於0,那麼在if內部的bool型變量就是0,那麼就不會執行cout<<ccString2;,而是直接進行spa

else
   cout<<ccString1;複製代碼

第五題解析(錯題):3d

在 C/C++ 語言中,sizeof() 是一個判斷數據類型或者表達式長度的運算符。在32位機上,全部指針類型變量佔用內存字節數都爲4由於32位機就是 4字節 * 8個二進制位/字節 計算出來的.若是在64位機上,指針佔用內存大小就是:8個字節.

那麼接下來其實就是判斷括號內的變量的類型,而後根據查表得出的結果找出各自的長度。對照表以下圖,對照以後就有

A:8  
B:17  
C:1     
D:8複製代碼


第六題解析:

這個沒多少好說的,我全憑感受作的,第一個的話,宏我並不記得有這麼大的安全隱患,第三個,宏就是爲了程序的可讀性,可修改性作出的貢獻,第四個,宏定義對於提升運行效率其實沒啥影響吧,只是方便觀看以及方便修改吧!我不太清楚,尚未精學,後面慢慢應該還會講到吧!

第七題解析【錯題】:

我記岔了,覺得公有繼承的派生類的話不會把父類的私有量繼承過來,實際上會的,可是隻是不能訪問,因此說最終B裏面就是三個指針,無論能不能訪問,sizeof(B)是不會錯的!8*3=24咯 ~

第八題解析【錯題】:

這個相對來講算是比較複雜了。我當時是理清楚了的,可是後面好像是判斷錯誤,而後多讀了一個數的樣子,下面詳細解釋下,

int fun1(char s[], char a, int n)
{
    int j;
    j = n;
    while (a < s[j] && j > 0) j--;
    return j;
}複製代碼

這個函數是要返回從s中的第七個開始往下數,第多少個可以知足不大於a的條件,就是說s是一個遞增的字符數組,a處於這個遞增數列的中間,從高處開始找到第一個小於或等於a的字符的碼值返回,
這就是fun1的做用,fun2的做用相似,從低處開始找,找到第一個大於等於a的字符的碼值返回,從主函數裏面知道,s的碼值從1-7對應着 D F H J L N P那麼很顯然的fun1返回的是5,fun2的返回值爲6,我是傻逼嗎?當時數的時候fun1數出來6!!!

第九題解析:

這個題目我真的是靠感受來的。首選,首先f1要傳進去的實參必須是一個指針,因此C沒毛病,而後關於D的話,我當時想的是,若是帶不帶括號有區別的話,那麼固然是要尊重初始定義的時候的帶括號的方法了。因此堅決果斷的選了D 如今想一想,若是帶括號沒用,帶這個括號幹嗎,閒的雞兒疼嗎??至於別的,同理,A須要帶括號,B裏面傳入指針,不要*就行了!

第十題解析【錯題】:

老實說這種題目我見所未見,也就今天第一波牛客見到了。之後慢慢來吧!
本題是16位機器,char型佔1個字節,int型佔2個字節。結構體中字節對齊有兩條規則:

  • 數據成員自對齊,即數據成員起始地址爲數據類型長度的整數倍,如該題int型b只能從0,2,4...等地址處開始放;
  • 結構體總長度是結構體中有效對齊值的整數倍,有效對齊值,如該題沒明確指出,則爲最長數據成員(int b)長度的整數倍;

根據上面兩條規則,畫出內存示意圖。根據規則1,int b從2處開始放,此時結構體總長度爲(1 + 1 + 2 + 1 = 5);再根據規則2,結構體總長度應爲2的整數倍,故應爲6.描紅的兩個字節表示被浪費的。


正文以後

一擡頭,已經十點半了。起牀!!不過我一直在糾結,我要不要繼續寫下去寫的這麼細呢?感受挺浪費時間的,可是又是一次很好的總結,並且對於之後複習有着莫大的好處。因此繼續堅持下吧,若是熬不下去了。那再說!

相關文章
相關標籤/搜索