




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、(一) 初級題1. 什么是預編譯,何時需要預編譯:答:(1) 總是使用不經(jīng)常改動的大型代碼體(2) 程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭<<預編譯又稱為預處理,是做些代碼文本的替換工作 處理#開頭的指令,比如拷貝#include包含的文件代碼,#define宏定義的替換,條件編譯等 就是為編譯做的預備工作的階段 主要處理#開始的預編譯指令 預編譯指令指示了在程序正式編譯前就由編譯器進行的操作,可以放在程序中的任何位置。常見的預編譯指令有: >>2. char * const p
2、0; char const * p const char *p上述三個有什么區(qū)別?答:char * const p; /常量指針,p的值不可以修改char const * p;/指向常量的指針,指向的常量值不可以改const char *p; /和char const *p3. char str1 = "abc"char str2 = "abc"const char str3 = "abc"const
3、 char str4 = "abc"const char *str5 = "abc"const char *str6 = "abc"char *str7 = "abc"char *str8 = "abc"cout << ( str1 = str2
4、) << endl;cout << ( str3 = str4 ) << endl;cout << ( str5 = str6 ) << endl;cout << ( str7 = str8 ) << endl;結(jié)果是:0 0 1 1str1,str2,s
5、tr3,str4是數(shù)組變量,它們有各自的內(nèi)存空間;而str5,str6,str7,str8是指針,它們指向相同的常量區(qū)域。4. 以下代碼中的兩個sizeof用法有問題嗎?void uppercase( char str ) / 將 str 中的小寫字母轉(zhuǎn)換成大寫字母 for( size_t i=0; i<sizeof(str)/sizeof(str0); +i )
6、160; if( 'a'<=stri && stri<='z' ) stri -= ('a'-'a' );char str = "abcde"cout << "str字符
7、長度為: " << sizeof(str)/sizeof(str0) << endl;uppercase( str );cout << str << endl;答:函數(shù)內(nèi)的sizeof有問題。根據(jù)語法,sizeof如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動態(tài)分配的或外部數(shù)組大小。函數(shù)外的str 是一個靜態(tài)定義的數(shù)組,因此其大小為6,因為還有'0',函數(shù)內(nèi)的str實際只是一個指向字符串的指針,沒有任何額外的與數(shù)
8、組相關的信息,因此 sizeof作用于上只將其當指針看,一個指針為4個字節(jié),因此返回4。5. 一個32位的機器,該機器的指針是多少位答:指針是多少位只要看地址總線的位數(shù)就行了。80386以后的機子都是32的數(shù)據(jù)總線。所以指針的位數(shù)就是4個字節(jié)了。6.main() int a5=1,2,3,4,5; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1);答:2,5*(a+1)就是a1
9、,*(ptr-1)就是a4, 執(zhí)行結(jié)果是2, 5。&a+1不是首地址+1,系統(tǒng)會認為加一個a數(shù)組的偏移,是偏移了一個數(shù)組的大小(本例是5個int)。int *ptr=(int *)(&a+1); 則ptr實際是&(a5),也就是a+5原因如下:&a是數(shù)組指針,其類型為 int (*)5; 而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同; a是長度為5的int數(shù)組指針,所以要加 5*sizeof(int)。所以ptr實際是a5。但是prt與(&a+1)類型是不一樣的(這點很重要),所以prt-1只會減去 sizeof(int*)
10、。a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a0的地址,&a是對象(數(shù)組)首地 址,a+1是數(shù)組下一元素的地址,即a1,&a+1是下一個對象的地址,即a5。7. 請問以下代碼有什么問題:int main() char a; char *str=&a; strcpy(str,"hello"); printf(str); retur
11、n 0; 答:沒有為str分配內(nèi)存空間,將會發(fā)生異常。問題出在將一個字符串復制進一個字符變量指針所指地址。雖然可以正確輸出結(jié)果,但因為越界進行內(nèi)在讀寫而導致程序崩潰。8.char* s="aaa" printf("%s",s);s0='b'printf("%s",s);有什么錯?答:"aaa"是字符串常量。s是指針,指向這個字符串常量,所以聲明s的時候就有問題。cosnt char* s="aaa" 然后又因為是常量,所以對是s0的賦值操作是不合法的。9. 寫
12、一個“標準”宏,這個宏輸入兩個參數(shù)并返回較小的一個。答:#define min(x, y) (x)>(y)?(y):(x) /結(jié)尾沒有''10. 嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么用c編寫死循環(huán)。答:while(1)或者for(;)11. 關鍵字static的作用是什么?答:定義靜態(tài)變量12. 關鍵字const有什么含意?答:表示常量不可以修改的變量。13. 關鍵字volatile有什么含意?并舉出三個不同的例子?答:提示編譯器對象的值可能在編譯器未監(jiān)測到的情況下改變。14. int (*s10)(int) 表示的是什么啊?答:int (*s10)(int) 函數(shù)指針
13、數(shù)組,每個指針指向一個int func(int param)的函數(shù)。15. 有以下表達式:int a=248; b=4; int const c=21; const int *d=&a;int *const e=&b; int const *f const =&a;請問下列表達式哪些會被編譯器禁止?為什么?答:*c=32; d=&b; *d=43; e=34; e=&a; f=0x321f;16. 交換兩個變量的值,不使用第三個變量。即a=3,b=5,交換之后a=5,b=3;答:有兩種解法, 一種用算術算法, 一種用(異或)a = a + b;b = a
14、 - b;a = a - b;ora = ab;/ 只能對int,char.b = ab;a = ab;ora = b = a;17.#include <stdio.h>#include <stdlib.h>void getmemory(char *p) p=(char *) malloc(100); strcpy(p,"hello world");int main( )
15、 char *str=null; getmemory(str); printf("%s/n",str); free(str); return 0; 答:程序崩潰,getmemory中的malloc 不能返回動態(tài)內(nèi)存, free()對str操作很危險18. 列舉幾種進程的同步機制,并比較其優(yōu)缺點。答:原子操作、信號量機制
16、、自旋鎖、管程、會合、分布式系統(tǒng)19. 進程之間通信的途徑答:共享存儲系統(tǒng)、消息傳遞系統(tǒng)、管道:以文件系統(tǒng)為基礎20. 進程死鎖的原因和4個必要條件答:資源競爭及進程推進順序非法;互斥、請求保持、不可剝奪、環(huán)路21. 死鎖的處理答:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖22. 操作系統(tǒng)中進程調(diào)度策略有哪幾種?答:fcfs(先來先服務),優(yōu)先級,時間片輪轉(zhuǎn),多級反饋23. 類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?答:類的靜態(tài)成員每個類只有一個,非靜態(tài)成員每個對象一個24. 純虛函數(shù)如何定義?使用時應注意什么?答:virtual void f()=0; 是接口,子類必須要實現(xiàn)25. 數(shù)組和鏈表的區(qū)
17、別答:數(shù)組:數(shù)據(jù)順序存儲,固定大小鏈表:數(shù)據(jù)可以隨機存儲,大小可動態(tài)改變26. iso的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優(yōu)缺點?答:應用層、表示層、會話層、運輸層、網(wǎng)絡層、物理鏈路層、物理層tcp/udp屬于運輸層tcp服務提供了數(shù)據(jù)流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。與tcp 不同, udp并不提供對ip協(xié)議的可靠機制、流控制以及錯誤恢復功能等。由于udp比較簡單,udp頭包含很少的字節(jié),比tcp負載消耗少tcp: 提供穩(wěn)定的傳輸服務,有流量控制,缺點是包頭大,冗余性不好udp: 不提供穩(wěn)定的服務,包頭小,開銷小 27. (voi
18、d *)ptr 和 (*(void*)ptr的結(jié)果是否相同?其中ptr為同一個指針答:(void *)ptr 和 (*(void*)ptr值是相同的 28.int main() int x=3; printf("%d",x); return 1;問函數(shù)既然不會被其它函數(shù)調(diào)用,為什么要返回1?答:main中,c標準認為0表示成功,非0表示錯誤。具體的值是某中具體出錯信息29. 要對絕對地址0x100000賦值,我們可以用(unsigned int*)0x100
19、000 = 1234; 那么要是想讓程序跳轉(zhuǎn)到絕對地址是0x100000去執(zhí)行,應該怎么做?答:*(void (*)( )0x100000 ) ( );首先要將0x100000強制轉(zhuǎn)換成函數(shù)指針,即: (void (*)()0x100000。然后再調(diào)用它: *(void (*)()0x100000)(); 用typedef可以看得更直觀些:typedef void(*)() voidfuncptr;*(voidfuncptr)0x100000)();30. 已知一個數(shù)組table,用一個宏定義,求出數(shù)據(jù)的元素個數(shù)答:#define ntbl#define ntbl (sizeof(table)
20、/sizeof(table0)31. 線程與進程的區(qū)別和聯(lián)系? 線程是否具有相同的堆棧? dll是否有獨立的堆棧?答:進程是死的,只是一些資源的集合,真正的程序執(zhí)行都是線程來完成的,程序啟動的時候操作系統(tǒng)就幫你創(chuàng)建了一個主線程。每個線程有自己的堆棧。dll中 有沒有獨立的堆棧,這個問題不好回答,或者說這個問題本身是否有問題。因為dll中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧,如果dll中的代碼是 exe中的線程所調(diào)用,那么這個時候是不是說這個dll沒有自己獨立的堆棧?如果dll中的代碼是由dll自己創(chuàng)建的線程所執(zhí)行,那么是不是說dll有獨 立的堆棧?以上講的是堆棧,如果對于堆來說,每個dl
21、l有自己的堆,所以如果是從dll中動態(tài)分配的內(nèi)存,最好是從dll中刪除,如果你從dll中分配內(nèi)存,然后在exe中,或者另外一個dll中刪除,很有可能導致程序崩潰32. unsigned short a = 10;printf("a = %un", a);char c=128;printf("c = %dn",c);輸出多少?并分析過程答:第一題,a 0xfffffff5, int值為-11,但輸出的是uint。所以輸出4294967285。第二題,c0x10,輸出的是int,最高位為1,是負數(shù),所以它的值就是0x00的補碼就是128,所以輸出-128。這
22、兩道題都是在考察二進制向int或uint轉(zhuǎn)換時的最高位處理。 (二) 中級題1. -1,2,7,28,126請問28和126中間那個數(shù)是什么?為什么?答:第一題應該是43-1=63規(guī)律是n3-1(當n為偶數(shù)0,2,4) n3+1(當n為奇數(shù)1,3,5)2. 用兩個棧實現(xiàn)一個隊列的功能?要求給出算法和思路!答:設2個棧為a,b, 一開始均為空.入隊:將新元素push入棧a;出隊:(1)判斷棧b是否為空;(2)如果不為空,則將棧a中所有元素依次pop出并push到棧b;(3)將棧b的棧頂元素pop出;這樣實現(xiàn)的隊列入隊和出隊的平
23、攤復雜度都還是o(1), 比上面的幾種方法要好。3. 在c語言庫函數(shù)中將一個字符轉(zhuǎn)換成整型的函數(shù)是atol()嗎,這個函數(shù)的原型是什么?答:函數(shù)名: atol功 能: 把字符串轉(zhuǎn)換成長整型數(shù)用 法: long atol(const char *nptr);程序例:#include <stdlib.h>#include <stdio.h>int main(void) long l; char *str = &qu
24、ot;98765432" l = atol(lstr); printf("string = %s integer = %ldn", str, l); return(0); 4. 對于一個頻繁使用的短小函數(shù),在c語言中應用什么實現(xiàn),在c+中應用什么實現(xiàn)?答:c用宏定義,c+用inline5. 直接鏈接兩個信令點的一組鏈路稱作什么?答
25、:ppp點到點連接7. 軟件測試都有那些種類?答:黑盒:針對系統(tǒng)功能的測試 白合:測試函數(shù)功能,各函數(shù)接口8. 確定模塊的功能和模塊的接口是在軟件設計的那個隊段完成的?答:概要設計階段9.unsigned char *p1;unsigned long *p2;p1=(unsigned char *)0x801000;p2=(unsigned long *)0x810000;請問p1+5=_;p2+5=_;答案:801005;810014。不要忘記了這個是16進制的數(shù)字,p2要加20變?yōu)?6進制就是14選擇題:1. ethternet鏈接到internet用到
26、以下那個協(xié)議?a.hdlc; b.arp; c.udp; d.tcp; e.id2. 屬于網(wǎng)絡層協(xié)議的是:a.tcp; b.ip; c.icmp; d.x.253.windows消息調(diào)度機制是:a.指令隊列; b.指令堆棧; c.消息隊列; d.消息堆棧;答:b,a,c找錯題:1. 請問下面程序有什么錯誤?int a602501000,i,j,k;for(k=0;k<=1000;k+) for(j=0;j<2
27、50;j+) for(i=0;i<60;i+) aijk=0; 答:把循環(huán)語句內(nèi)外換一下 2. 以下是求一個數(shù)的平方的程序,請找出錯誤:#define square(a) (a)*(a)int a=5;int b;b=square(a+);答案:這個沒有問題,s(a),就是(a)×(a)唯一要注意的就是計算后a7了
28、3. 找錯誤typedef unsigned char byteint examply_fun(byte gt_len; byte *gt_code) byte *gt_buf; gt_buf=(byte *)malloc(max_gt_length);
29、0; if(gt_len>max_gt_length) return gt_length_error; .答:要釋放內(nèi)存問答題:1.ip phone的原理是什么?答:ipv62.tcp/ip通信建立的過程怎樣,端口有什么作用?答:
30、三次握手,確定是哪個應用程序使用該協(xié)議 (三) 高級題1、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別?答:全局變量(外部變量)的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當然也是靜態(tài)存儲方式。 這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不
31、能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯誤。從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域, 限制了它的使用范圍。static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當前源文件中使用的函數(shù)應該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數(shù),應該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一
32、次,防止在其他文件單元中被引用;static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個被調(diào)用中維持一份拷貝2、程序的局部變量存在于( )中,全局變量存在于( )中,動態(tài)申請數(shù)據(jù)存在于( )中。答:棧;靜態(tài)區(qū);堆3、設有以下說明和定義:typedef union long i; int k5; char c; date;struct data int cat; date cow; double dog; too;date max;則語句 printf(&quo
33、t;%d",sizeof(too)+sizeof(max);的執(zhí)行結(jié)果是:_答:date是一個union, 變量公用空間. 里面最大的變量類型是int5, 占用20個字節(jié). 所以它的大小是20data是一個struct, 每個變量分開占用空間. 依次為int4 + date20 + double8 = 32.所以結(jié)果是 20 + 32 = 52.當然.在某些16位編輯器下, int可能是2字節(jié),那么結(jié)果是 int2 + date10 + double8 = 204、隊列和棧有什么區(qū)別?答:隊列先進先出,棧后進先出.5、已知一個單向鏈表的頭,請寫出刪除其某一個結(jié)點的算法,要求,先找到此
34、結(jié)點,然后刪除。 ?疑問答:slnodetype *delete(slnodetype *head,int key) if(head->number=key) head=pointer->next; free(pointer);
35、 break; back = pointer; pointer=pointer->next; if(pointer->number=key)
36、160; back->next=pointer->next; free(pointer); break; void delete(node* p) if(head = node) while(p) 7、請找出下面代碼中的所以錯誤說明:以下代碼是把一個字符串倒序,如“abcd”倒序后變?yōu)椤癲cba”#include "string.h"main()
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年市政工程考試分值解析試題及答案
- 工程項目管理考試疑難試題及答案剖析
- 2024-2025車間職工安全培訓考試試題含答案(新)
- 2025年車間職工安全培訓考試試題B卷附答案
- 2025攝影作品版權(quán)登記合同
- 水利水電工程決策支持系統(tǒng)試題及答案
- 職場工程項目管理試題及答案須知
- 2025-2030年罐頭食品市場前景分析及投資策略與風險管理研究報告
- 2025-2030年紅外線適配器行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2030年管理培訓行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 移動醫(yī)療賦能慢病管理的模式與效果
- 《老年人輔助器具應用( 第2版)》高職全套教學課件
- 2024至2030年全球及中國比特幣和加密貨幣錢包細分市場深度研究報告
- 2023年海南省中考物理試題(解析版)
- DL-T+544-2012電力通信運行管理規(guī)程
- 食品安全日管控、周排查及月調(diào)度記錄表
- 2024年浙江省紹興市高二下學期期末調(diào)測數(shù)學試題及答案
- 計算機程序設計員國家職業(yè)技能標準
- 《人民調(diào)解法》講解
- 新加坡員工合同范本
- 《無人機測繪技能訓練模塊》課件-模塊9:無人機解析空中三角測量
評論
0/150
提交評論