標準c語言筆試題_第1頁
標準c語言筆試題_第2頁
標準c語言筆試題_第3頁
標準c語言筆試題_第4頁
標準c語言筆試題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

標準c語言筆試題1.局部變量能否和全局變量重名?(華為)解析:能,局部會屏蔽全局。要用全局變量,需要使用"::"局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數(shù)內(nèi)可以定義多個同名的局部變量.比如在兩個循環(huán)體內(nèi)都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環(huán)體內(nèi)。3.如何引用一個已經(jīng)定義過的全局變量?(華為)解析:extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個編寫錯了,那么在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯。4.static全局變量與普通的全局變量有什么區(qū)別?解析:1)全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式,靜態(tài)全局變量當然也是靜態(tài)存儲方式從以上分析可以看出,static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝5.進程和線程的差別(微軟亞洲)解析:答:線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體.與進程的區(qū)別:(1)調(diào)度:線程作為調(diào)度和分配的基本單位,進程作為擁有資源的基本單位(2)并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的多個線程之間也可并發(fā)執(zhí)行(3)擁有資源:進程是擁有資源的獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源.(4)系統(tǒng)開銷:在創(chuàng)建或撤消進程時,由于系統(tǒng)都要為之分配和回收資源,導致系統(tǒng)的開銷明顯大于創(chuàng)建或撤消線程時的開銷6.用宏定義寫出swap(x,y)(思科)解析:#defineswap(x,y)x=x+y;y=x-y;x=x-y7.什么是預編譯,何時需要預編譯:(思科)解析:就是指程序執(zhí)行前的一些預處理工作,主要指#表示的.何時需要預編譯?1)、總是使用不經(jīng)常改動的大型代碼體。2)、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。8.下述三個有什么區(qū)別?char*constp;charconst*p,constchar*p;(慧通)解:constchar*p和charconst*p修飾的是p所指向的變量,不可以用*p=’a’等這樣的方式修改變量區(qū)的內(nèi)容.指針本身是可以修改的,比如說charx,y;const*p=&x,p=&y,修改指針本身是可以的,*p=‘b’就不行。Char*constp;中const修飾的是指針,表明指針在操作過程中不可以修改,而指針所指向的內(nèi)容是可以修改的,比如說charx,y;char*constp=&x;*p=‘b’是可以的,但p=&y;是不可以的,const修飾的是指針,不可以修改指針的指向,只可以修改指針所捆綁的變量9.int(*s[10])(int)表示的是什么???(慧通)解析:這樣的表達式可以遵循這樣的規(guī)則:從右向左,由近及遠,括號優(yōu)先;比如:從a符號開始。其右邊是[10],說明a是個數(shù)組,其中存了十個元素。再看a的左邊是一個*。說明數(shù)組中存的是指針。現(xiàn)在在看(*a[10])的右邊是(int);說明所存的指針是指向有一個int形參的函數(shù)現(xiàn)在看(*a[10])的左邊是個int,說明指向的函數(shù)的返回值為int類型;10.進程之間通信的途徑,進程間通信方法(慧通)解析:無名管道,命名管道,消息隊列,信號,共享內(nèi)存,套接字。等11.什么是“引用”?申明和使用“引用”要注意哪些問題?解析:引用就是某個目標變量的“別名”(alias),對應用的操作與對變量直接操作效果完全相同。申明一個引用的時候,切記要對其進行初始化。引用聲明完畢后,相當于目標變量名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數(shù)據(jù)類型,因此引用本身不占存儲單元,系統(tǒng)也不給引用分配存儲單元。不能建立數(shù)組的引用12.include和include“filename.h”的區(qū)別?解析:<>是從標準庫路徑搜索,“”是從用戶當前工作目錄開始,找不到,在到標準庫開始13.Heap和Stack的區(qū)別?解析:Heap是堆,Stack是棧。棧的空間由操作系統(tǒng)自動分配和回收,而堆上的空間由程序員申請和釋放。棧的空間大小較小,而堆的空間較大。棧的地址空間往低地址方向生長,而堆向高地址方向生長。棧的存取效率更高。程序在編譯期間對變量和函數(shù)的內(nèi)存分配都在棧上,且程序運行過程中對函數(shù)調(diào)用中參數(shù)的內(nèi)存分配也是在棧上。14.sizeof和strlen之間的區(qū)別?解析:(1)sizeof操作符的結(jié)果類型是size_t,它在頭文件中的typedef為unsignedint類型,該類型保證能容納實現(xiàn)所建立的最大對象的字節(jié)大小。(2)sizeof是運算符,strlen是函數(shù)(3)sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以’\0’結(jié)尾的。(4)數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針。(5)大部分編譯程序在編譯的時候就把sizeof計算過了是類型或是變量的.長度。(6)strlen的結(jié)果要在運行的時候才能計算出來,用來計算字符串的長度,而不是類型占用內(nèi)存的大小。(7)sizeof后如果是類型必須加括號,如果是變量名可以不加括號。(8)當使用了一個結(jié)構(gòu)類型或變量時,sizeof返回實際的大小。(9)數(shù)組作為參數(shù)傳遞給函數(shù)時傳的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址。(10)計算結(jié)構(gòu)變量的大小就必須討論數(shù)組對齊問題。(11)sizeof操作符不能用于函數(shù)類型,不完全類型或位字段。15.#defineDOUBLE(x)x+x,i=5*DOUBLE(5);i是多少?解析:i為30。16.unsignedshorthash(unsignedshortkey){return(key>>)%256}解析請問hash(16),hash(256)的值分別是:A.1.16;B.8.32;C.4.16;D.1.3217.booldoubleintfloat.各種類型與0值的比較(概率較大)解析:請寫出BOOLflag與“零值”比較的if語句。if(flag)或者if(!flag)如下寫法均屬不良風格,不得分。if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)請寫出floatx與“零值”比較的if語句。(4分)標準答案示例:constfloatEPSINON=0.00001;if((x>=-EPSINON)&&(x<=EPSINON)不可將浮點變量用“==”或“!=”與數(shù)字比較,應該設法轉(zhuǎn)化成“>=”或“<=”此類形式如下是錯誤的寫法,不得分。if(x==0.0)if(x!=0.0)請寫出char*p與“零值”比較的if語句。(3分)標準答案:if(p==NULL)或者if(p!=NULL)如下寫法均屬不良風格,不得分。if(p==0)if(p!=0)if(p)if(!)18.結(jié)構(gòu)與聯(lián)合有和區(qū)別?解析:1.結(jié)構(gòu)和聯(lián)合都是由多個不同的數(shù)據(jù)類型成員組成,但在任何同一時刻,聯(lián)合中只存放了一個被選中的成員(所有成員共用一塊地址空間),而結(jié)構(gòu)的所有成員都存在(不同成員的存放地址不同)。2.對于聯(lián)合的不同成員賦值,將會對其它成員重寫,原來成員的值就不存在了,而對于結(jié)構(gòu)的不同成員賦值是互不影響的19.簡述數(shù)組與指針的區(qū)別?解析:數(shù)組要么在靜態(tài)存儲區(qū)被創(chuàng)建(如全局數(shù)組),要么在棧上被創(chuàng)建。指針可以隨時指向任意類型的內(nèi)存塊。(1)修改內(nèi)容上的差別chara[]=“hello”;a[0]=‘X’;char*p=“world”;//注意p指向常量字符串p[0]=‘X’;//編譯器不能發(fā)現(xiàn)該錯誤,運行時錯誤(2)用運算符sizeof可以計算出數(shù)組的容量(字節(jié)數(shù))。sizeof(p),p為指針得到的是一個指針變量的字節(jié)數(shù),而不是p所指的內(nèi)存容量。C++/C語言沒有辦法知道指針所指的內(nèi)存容量,除非在申請內(nèi)存時記住它。注意當數(shù)組作為函數(shù)的參數(shù)進行傳遞時,該數(shù)組自動退化為同類型的指針。chara[]="helloworld";char*p=a;cout<<sizeof(a)<<endl;//12字節(jié)cout<<sizeof(p)<<endl;//4字節(jié)計算數(shù)組和指針的內(nèi)存容量voidFunc(chara[100]){cout<<sizeof(a)<<endl;//4字節(jié)不是100字節(jié)}20.如何判斷一段程序是由C編譯程序還是由C++編譯程序編譯的?解析:#ifdef__cpluspluscout<<"c++";#elsecout<<"c";#endif21.main主函數(shù)執(zhí)行完畢后,是否可能會再執(zhí)行一段代碼,給出說明?解析:可以,可以用_onexit注冊一個函數(shù),它會在main之后執(zhí)行intfn1(void),fn2(void),fn3(void),fn4(void);voidmain(void){Stringstr("zhanglin");_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);printf("Thisisexecutedfirst.");}intfn1(){printf("next.");return0;}intfn2(){printf("executed");return0;}intfn3(){printf("is");return0;}intfn4(){printf("This");return0;}22.intid[sizeof(unsignedlong)];這個對嗎?為什么??解析:對,這個sizeof是編譯時運算符,編譯時就確定了可以看成和機器有關(guān)的常量。23.如何打印出當前源文件的文件名以及源文件的當前行號?解析:cout<<__FILE__;cout<<__LINE__;__FILE__和__LINE__是系統(tǒng)預定義宏,這種宏并不是在某個文件中定義的而是由編譯器定義的解析:不能,數(shù)組作為參數(shù)傳遞給函數(shù)時,數(shù)組名被退化為指針,因此函數(shù)中的sizeof(str)實際是在求一個指針的sizeof,答案為4,因此不能計算出數(shù)組的長度。24.以下函數(shù)能求出數(shù)組的長度嗎?voidfun(charstr[]){intlen=sizeof(str)/sizeof(str[0]);}25.輸出的結(jié)果是多少,并分析過程?unsignedshortA=10;printf(“%u”,~A);charch=128;printf(“%d”,ch);答:~A=4294967285,首先將A轉(zhuǎn)化為int類型,即對應的二進制數(shù)值為:00000000000000000000000000001010,~A=11111111111111111111111111110101,其實這種情況最高位是1,認為是負數(shù),但是在輸出中指定以無符號數(shù)輸出,于是結(jié)果為4294967285=4294967295(四字節(jié)表示的最大數(shù))-10.ch=128對應的二進制為:10000000,在輸出中以整數(shù)形式輸出,由于最高位是1,于是就是負數(shù),10000000是該負數(shù)的補碼,根據(jù)求補碼的反步驟計算,先-1,得到01111111,在取反得10000000=128,由于本身是負數(shù),即為-128.26.New與mallocfree的聯(lián)系與區(qū)別?解析:都是在堆(heap)上進行動態(tài)的內(nèi)存操作。用malloc函數(shù)需要指定內(nèi)存分配的字節(jié)數(shù)并且不能初始化對象,new會自動調(diào)用對象的構(gòu)造函數(shù)。會調(diào)用對象的destructor,而free不會調(diào)用對象的destructor.27.用變量a給出下面的定義(特別重要)a)一個整型數(shù)(Aninteger)b)一個指向整型數(shù)的指針(Apointertoaninteger)c)一個指向指針的的指針,它指向的指針是指向一個整型數(shù)(Apointertoapointertoaninteger)d)一個有10個整型數(shù)的數(shù)組(Anarrayof10integers)e)一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的(Anarrayof10pointerstointege

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論