以下《2016網(wǎng)易實(shí)習(xí)生招聘筆試題目》是由CN人才網(wǎng)小編為您提供,希望對(duì)您筆試有所幫助!
選擇題:
1、二維數(shù)組int a[3][4],下列能表示a[1][2]的是?
A.*(*(a+1)+2) B.*(a+3) C.(&a[0]+1)[2] D.(a[0]+1)
2、short a[100],則sizeof(a)的值是?
A.2 B.4 C.200 D.400
問(wèn)答題:
1、解釋說(shuō)明static、const和volatile兩個(gè)關(guān)鍵字的作用?
關(guān)鍵字static有三個(gè)明顯的作用:
1、在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。
2、 在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所有函數(shù)訪(fǎng)問(wèn),但不能被模塊外其它函數(shù)訪(fǎng)問(wèn)。它是一個(gè)本地的全局變量。
3、在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。
const 有什么用途?
1、可以定義 const 常量
2、const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動(dòng),能提高程序的健壯性。
volatile問(wèn)題:
volatile的作用: 作為指令關(guān)鍵字,確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值。。。
volatile的語(yǔ)法與const是一樣的,但是volatile的意思是“在編譯器認(rèn)識(shí)的范圍外,這個(gè)數(shù)據(jù)可以被改變”。不知何故,環(huán)境正在改變數(shù)據(jù)(可能通過(guò)多任務(wù)處理),所以,volatile告訴編譯器不要擅自作出有關(guān)數(shù)據(jù)的任何假設(shè)——在優(yōu)化起家這是特別重要的。如果編譯器說(shuō):“我已經(jīng)把數(shù)據(jù)讀入寄存器,而且在沒(méi)有與寄存器接觸。”在一般情況下,它不需要再讀入這個(gè)數(shù)據(jù)。但是,如果數(shù)據(jù)是volatile修飾的,編譯器則是不能做出這樣的假定,因?yàn)閿?shù)據(jù)可能被其他進(jìn)程改變了,編譯器必須重新讀這個(gè)數(shù)據(jù)而不是優(yōu)化這個(gè)代碼。就像建立const對(duì)象一樣,程序員也可以建立volatile對(duì)象,甚至還建立const volatile對(duì)象。這個(gè)對(duì)象不能被程序員改變,但可通過(guò)外面的工具改變。
volatile對(duì)象每次被訪(fǎng)問(wèn)時(shí)必須重新讀取這個(gè)變量的值,而不是用保存在寄存器中的備份。下面時(shí)volatile變量的幾個(gè)例子:
.并行設(shè)備的硬件寄存器(如狀態(tài)寄存器);
.一個(gè)中斷服務(wù)子程序中會(huì)訪(fǎng)問(wèn)到的非自動(dòng)變量(Non-automatic variables);
.多現(xiàn)成應(yīng)用中被幾個(gè)任務(wù)共享的變量。
一個(gè)參數(shù)可以const同時(shí)也是volatile,一個(gè)指針也是可以為volatile的,但是具體編程時(shí)要小心,要保證不被意外修改。
1、static關(guān)鍵字的作用,個(gè)人經(jīng)驗(yàn)主要有以下幾種:1)函數(shù)局部static變量,第一次函數(shù)調(diào)用被初始化,后續(xù)每次調(diào)用將使用上次調(diào)用后保存的值;2)全局變量中static變量,可以防止被其他文件的代碼使用這個(gè)變量,有點(diǎn)將這個(gè)全局變量設(shè)置為private的意味;3)對(duì)于static函數(shù)來(lái)說(shuō),效果和2中的變量相同;4)C++類(lèi)中static方法,不需要實(shí)例化訪(fǎng)問(wèn);5)C++定義static類(lèi)成員變量,不需要實(shí)例化訪(fǎng)問(wèn),不過(guò)需要先定義,定義的時(shí)候可以初始化數(shù)組。
2、volatile用來(lái)聲明一個(gè)變量,并強(qiáng)制程序在每次使用變量的重新從變量地址讀取數(shù)據(jù),這是為了防止變量在其他地方被改變,而程序仍然使用沒(méi)有更新的數(shù)據(jù)。
2、說(shuō)明C++內(nèi)存分配方式有幾種?每種使用都有哪些注意項(xiàng)?
1.從靜態(tài)存儲(chǔ)區(qū)域分配。內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好,這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在。例如全局變量,static變量。
2.在棧上創(chuàng)建。在執(zhí)行函數(shù)時(shí),函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
3.從堆上分配,亦稱(chēng)動(dòng)態(tài)內(nèi)存分配。程序在運(yùn)行的時(shí)候用malloc或new申請(qǐng)任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存。動(dòng)態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問(wèn)題也最多。
----------------------------------------
一般所說(shuō)的堆棧(stack)往往是指棧,先進(jìn)后出,它是一塊內(nèi)存區(qū)。用以存放程序的局部變量,臨時(shí)變量,函數(shù)的參數(shù),返回地址等。在這塊區(qū)域中的變量的分配和釋放由系統(tǒng)自動(dòng)進(jìn)行。不需要用戶(hù)的參與。
而在堆(heap,先進(jìn)先出)上的空間則是由用戶(hù)進(jìn)行分配,并由用戶(hù)負(fù)責(zé)釋放
編程題:
1、給定一個(gè)升序排列的自然數(shù)數(shù)組,數(shù)組中包含重復(fù)數(shù)字,例如:[1,2,2,3,4,4,4,5,6,7,7]。問(wèn)題:給定任意自然數(shù),對(duì)數(shù)組進(jìn)行二分查找,返回?cái)?shù)組正確的位置,給出函數(shù)實(shí)現(xiàn)。注:連續(xù)相同的數(shù)字,返回第一個(gè)匹配位置還是最后一個(gè)匹配位置,由函數(shù)傳入?yún)?shù)決定。
分析:既然是二分查找的變形,那么先寫(xiě)個(gè)正確的二分查找吧: