




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上1、int a10=1,2,3,4,5,6,7,8,9,0; int *p=&a1; 則p6等于82、整數(shù)數(shù)組清零:bzero(),memset()。3、siezof();變量所占地址的字節(jié)數(shù)4、 main()char *str=ab,cd,ef,gh,ij,kl;char *t;t=(str+4)-1;printf(%s,t);則顯示gh5、小端:低位字節(jié)數(shù)據(jù)存儲(chǔ)在低地址大端:高位字節(jié)數(shù)據(jù)存儲(chǔ)在低地址例如:int a=0x;(a首地址為0x2000)0x2000 0x2001 0x2002 0x2003 0x12 0x34 0x56 0x78 大端格式6、異步IO和
2、同步IO區(qū)別如果是同步IO,當(dāng)一個(gè)IO操作執(zhí)行時(shí),應(yīng)用程序必須等待,直到此IO執(zhí)行完,相反,異步IO操作在后臺(tái)運(yùn)行,IO操作和應(yīng)用程序可以同時(shí)運(yùn)行,提高系統(tǒng)性能,提高IO流量; 在同步文件IO中,線程啟動(dòng)一個(gè)IO操作然后就立即進(jìn)入等待狀態(tài),直到IO操作完成后才醒來(lái)繼續(xù)執(zhí)行,而異步文件IO中,線程發(fā)送一個(gè)IO請(qǐng)求到內(nèi)核,然后繼續(xù)處理其他事情,內(nèi)核完成IO請(qǐng)求后,將會(huì)通知線程IO操作完成了。7、用變量a定義一個(gè)整型數(shù) int a;一個(gè)指向整型數(shù)的指針 int *a;一個(gè)指向指針的指針,它指向的指針式指向一個(gè)整型數(shù) int *a;一個(gè)有10個(gè)整型數(shù)的數(shù)組 int a10;一個(gè)有10指針的數(shù)組,該指針
3、是指向一個(gè)整型數(shù) int *a10;一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針 int (*a)10;一個(gè)指向函數(shù)的指針,該函數(shù)有一個(gè)整型數(shù)參數(shù)并返回一個(gè)整型數(shù) int (*a)(int);一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型數(shù)參數(shù)并返回一個(gè)整型 int (*a10)(int);8、int foo(void)int i;char c=0x80;i=c;if(i0)return 1;return 2;返回值為2;因?yàn)閕=c=-128;如果c=0x7f,則i=c=127。9、a=b*2;a=b/4;a=b%8;a=b/8*8+b%4;a=b*15;效率最高的a=b*2 - a=b a
4、=b2;a=b%8 - a=b&7;a=b/8*8+b%4 - a=(b3) a=(b6)?(c=1):(c=0);則c=1,但a+b=-14;如果a為int類型則c=0。原來(lái)有符號(hào)數(shù)和無(wú)符號(hào)數(shù)進(jìn)行比較運(yùn)算時(shí)(=,,=),有符號(hào)數(shù)隱式轉(zhuǎn)換成了無(wú)符號(hào)數(shù)(即底層的補(bǔ)碼不變,但是此數(shù)從有符號(hào)數(shù)變成了無(wú)符號(hào)數(shù)),比如上面 (a+b)6這個(gè)比較運(yùn)算,a+b=-14,-14的補(bǔ)碼為10010。此數(shù)進(jìn)行比較運(yùn)算時(shí),被當(dāng)成了無(wú)符號(hào)數(shù),它遠(yuǎn)遠(yuǎn)大于6,所以得到上述結(jié)果。12、給定一個(gè)整型變量a,寫兩段代碼,第一個(gè)設(shè)置a的bit3,第二個(gè)清除a的bit,在以上兩個(gè)操作中,要保持其它位不變。#define BIT3
5、(0x13)static int a;void set_bit3(void)a |= BIT3;void clear_bit3(void)a &= BIT3;13、要求設(shè)置一絕對(duì)地址為0x67a9的整型變量的值為0xaa66。int *ptr; ptr = (int *)0x67a9; *ptr = 0xaa66;(建議用這種) 一個(gè)較晦澀的方法是: *(int * const)(0x67a9) = 0xaa66;14、中斷是系統(tǒng)中重要的組成部分,這導(dǎo)致了很多編譯開(kāi)發(fā)商提供一種擴(kuò)展讓標(biāo)準(zhǔn)C支持中斷。具代表性的是,產(chǎn)生了一個(gè)新的關(guān)鍵字_interrupt。下面的代碼就使用了_interrupt關(guān)
6、鍵字去定義了一個(gè)中斷服務(wù)子程序(ISR),請(qǐng)?jiān)u論一下這段代碼的。_interrupt void compute_area (void)double area = PI * radius * radius;printf( Area = %f, area);return area;ISR不可能有參數(shù)和返回值的!ISR盡量不要使用浮點(diǎn)數(shù)處理程序,浮點(diǎn)數(shù)的處理程序一般來(lái)說(shuō)是不可重入的,而且是消耗大量CPU時(shí)間的!printf函數(shù)一般也是不可重入的,UART屬于低速設(shè)備,printf函數(shù)同樣面臨大量消耗CPU時(shí)間的問(wèn)題!15、評(píng)價(jià)下面的代碼片斷:unsigned int zero = 0;unsigne
7、d int compzero = 0xFFFF;/*1s complement of zero */對(duì)于一個(gè)int型不是16位的處理器為說(shuō),上面的代碼是不正確的。應(yīng)編寫如下:unsigned int compzero = 0;16、main()char *ptr;if (ptr = (char *)malloc(0) = NULL)puts(Got a null pointer);elseputs(Got a valid pointer);該代碼的輸出是“Got a valid pointer”。還可以*ptr=a;不出現(xiàn)段錯(cuò)誤17、Typedef 在中頻繁用以聲明一個(gè)已經(jīng)存在的數(shù)據(jù)類型的同義
8、字。也可以用預(yù)處理器做類似的事。 例如,思考一下下面的例子:#define dPS struct s *typedef struct s * tPS;以上兩種情況的意圖都是要定義dPS 和 tPS 作為一個(gè)指向結(jié)構(gòu)s指針。哪種方法更好呢?(如果有的話)為什么?這是一個(gè)非常微妙的問(wèn)題,任何人答對(duì)這個(gè)問(wèn)題(正當(dāng)?shù)脑颍┦菓?yīng)當(dāng)被恭喜的。答案是:typedef更好。思考下面的例子:dPS p1,p2;tPS p3,p4;第一個(gè)擴(kuò)展為struct s * p1, p2;上面的代碼定義p1為一個(gè)指向結(jié)構(gòu)的指,p2為一個(gè)實(shí)際的結(jié)構(gòu),這也許不是你想要的。第二個(gè)例子正確地定義了p3 和p4 兩個(gè)指針。18、in
9、t a = 5, b = 7, c;c = a+b;則c=12。19、int main()int j=2;int i=1;if(i = 1) j=3;if(i = 2) j=5;printf(%d,j);輸出為5;如果再加上if(i=3)j=6;則輸出6。20、宏定義是在預(yù)編譯階段被處理的。21、Norflash與Nandflash的區(qū)別(1)、NAND閃存的容量比較大(2)、由于NandFlash沒(méi)有掛接在地址總線上,所以如果想用NandFlash作為系統(tǒng)的啟動(dòng)盤,就需要CPU具備特殊的功能,如s3c2410在被選擇為NandFlash啟動(dòng)方式時(shí)會(huì)在上電時(shí)自動(dòng)讀取NandFlash的4k數(shù)據(jù)
10、到地址0的SRAM中。(3)、NAND Flash一般地址線和數(shù)據(jù)線共用,對(duì)讀寫速度有一定影響。NOR Flash閃存數(shù)據(jù)線和地址線分開(kāi), 所以相對(duì)而言讀寫速度快一些。22、反碼:對(duì)原碼除符號(hào)位外的其余各位逐位取反就是反碼補(bǔ)碼:負(fù)數(shù)的補(bǔ)碼就是對(duì)反碼加1正數(shù)的原碼、反碼、補(bǔ)碼都一樣23、pthread_t tid;pthread_create(&tid,NULL,pthread_func,NULL);/創(chuàng)建線程pthread_join(tid,NULL);/等待子線程結(jié)束,并回收資源pthread_detach(tid);/與當(dāng)前進(jìn)程分離pthread_exit(NULL);/退出調(diào)用線程pth
11、read_cancel(tid);/取消線程pthread_mutex mutex=PTHREAD_MUTEX_INITIALIZER;pthread_mutex_init(&mutex,NULL);/初始化一個(gè)互斥鎖pthread_mutex_lock(&mutex);/對(duì)互斥鎖上鎖pthread_mutex_unlock(&mutex);/對(duì)互斥鎖解鎖sem_t sem;sem_init(&sem,0,1);/創(chuàng)建信號(hào)量并初始化它的值sem_wait(&sem);/信號(hào)量的值減1sem_post(&sem);/信號(hào)量的值加124、內(nèi)存管理MMU的作用*內(nèi)存分配和回收*內(nèi)存保護(hù)*內(nèi)存擴(kuò)充*地
12、址映射25、ROM是只讀存儲(chǔ)器,掉電不丟失RAM是讀寫存儲(chǔ)器,掉電丟失26、SRAM:CPU的緩存就是SRAM,靜態(tài)的隨機(jī)存取存儲(chǔ)器,加電情況下,不需要刷新,數(shù)據(jù)不會(huì)丟失DRAM,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器最為常見(jiàn)的系統(tǒng)內(nèi)存,需要不斷刷新,才能保存數(shù)據(jù)SDRAM:同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器,即數(shù)據(jù)的讀取需要時(shí)鐘來(lái)同步。27、signed char 的取值范圍-128127.28、編譯和鏈接有什么不同?(如外部符號(hào)的處理)編譯生成的是目標(biāo)文件(object *.o);編譯過(guò)程中對(duì)于外部符號(hào)不做任何解釋和處理。外部符號(hào)對(duì)應(yīng)的就是“符號(hào)”鏈接生成的是可執(zhí)行程序鏈接將會(huì)解釋和處理外部符號(hào)。外部符號(hào)對(duì)應(yīng)的是地址29、已
13、知strcpy函數(shù)的函數(shù)原型是:char *strcpy(char *strDest, const char *strSrc)。其中,strDest是目的字符串,strSrc是源字符串。不調(diào)用C+/C的字符串庫(kù)函數(shù),請(qǐng)編寫函數(shù)strcpychar *strcpy(char *strDest, const char *strSrc)int i=0;if(!(strDest & strSrc)return;while(strDesti+ = *strSrc+);return strDest;30、strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char *類型的返回值?為了實(shí)現(xiàn)鏈
14、式表達(dá)式int len = strlen(strcpy(strDest, strSrc);31、寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)#define MIN(a, b) (a) = (b) ? (a) : (b)32、關(guān)鍵字static的作用是什么static用來(lái)修飾一個(gè)局部的變量的時(shí)候,生命域是全局的作用域是局部的static用來(lái)修飾一個(gè)模塊內(nèi)的(某一個(gè)C的源程序文件)全局變量的時(shí)候生命域不變作用域減小,只在本模塊內(nèi)有效static用來(lái)修飾一個(gè)函數(shù)的時(shí)候作用域減小,只在本模塊內(nèi)有效33、說(shuō)明下面的聲明的含義:A.const int a; / a是一個(gè)常數(shù)int const
15、 a; / a是一個(gè)常數(shù)B.const int *a; / a是一個(gè)指向整型常數(shù)的指針int * const a; / a是一個(gè)指向整型變量的常指針int const * a const;/ a是一個(gè)指向整型常數(shù)的常指針C.char *strcpy(char *strDest, const char *strSrc);/ 參數(shù)在函數(shù)內(nèi)部不會(huì)被修改const int strcmp(char *source, char *dest);/ 函數(shù)的返回值不能被修改const int a = strcmp(xx, yy);if(strcmp(xx,yy) != 0)34、說(shuō)明關(guān)鍵字volatile有什么
16、含意,并給出例子。volatile表示被修飾的符號(hào)是易變的。告訴編譯器不要隨便優(yōu)化我的代碼!*一個(gè)硬件寄存器*中斷中用到的變量*線程之間共享變量volatile int a = 10;while(a & 0x01) = 0);#define P_UART_STATUS (const volatile unsigned int *)0x);/ volatile表示硬件會(huì)修改這個(gè)寄存器的內(nèi)容/ const表示該寄存器只讀,寫無(wú)意義35、printf可以接受多個(gè)參數(shù),為什么,請(qǐng)寫出printf的原型。int printf(const char *fmt, .);36、什么是堆棧,簡(jiǎn)述為什么需要堆棧?
17、堆棧是計(jì)算機(jī)中最常用的一種,保存數(shù)據(jù)的一塊連續(xù)內(nèi)存;比如函數(shù)的調(diào)用是用堆棧實(shí)現(xiàn)的。37、請(qǐng)列舉常用的串行通信方式(兩種以上),并簡(jiǎn)述串行通信和并行通信不同之處、優(yōu)缺點(diǎn)。異步通信和同步通信;并行速度快,串行口線間干擾小38、列舉一下你熟悉7層OSI協(xié)議中的幾層。說(shuō)說(shuō)你最熟悉的一層協(xié)議的功能。 應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。39、路由協(xié)議:網(wǎng)關(guān)-網(wǎng)關(guān)協(xié)議,外部網(wǎng)關(guān)協(xié)議,內(nèi)部網(wǎng)關(guān)協(xié)議(RIP-1、RIP-IGRP、EIGRP、IS-IS和OSPF)40、位轉(zhuǎn)換位 8 7 6 5 4 3 2 1數(shù) v8 v7 v6 v5 v4 v3 v2 v1轉(zhuǎn)換后:位 8 7 6 5
18、4 3 2 1數(shù) v1 v2 v3 v4 v5 v6 v7 v8unsigned char bit_reverse(unsigned char c)unsigned char buf = 0;int bit = 8;while(bit)bit-;buf |= (c & 1) =1;return buf;41、字符串倒序1)、inverted_order(char *p)char *s1,*s2,tem;s1=p;s2=s1+strlen(p)-1;while(s1(b)?(a):(b)50、什么是平衡二叉樹(shù)?當(dāng)且僅當(dāng)兩個(gè)子樹(shù)的高度差不超過(guò)1時(shí),這個(gè)樹(shù)是平衡二叉樹(shù)。51、全局變量和局部變量的區(qū)別
19、。全局變量,儲(chǔ)存在靜態(tài)區(qū).進(jìn)入main函數(shù)之前就被創(chuàng)建.生命周期為整個(gè)源程序;局部變量,在棧中分配.在函數(shù)被調(diào)用時(shí)才被創(chuàng)建.生命周期為函數(shù)內(nèi)。52、數(shù)組與鏈表的區(qū)別。數(shù)組中的數(shù)據(jù)在內(nèi)存中的按順序存儲(chǔ)的,而鏈表是隨機(jī)存儲(chǔ)的!要訪問(wèn)數(shù)組中的元素可以按下標(biāo)索引來(lái)訪問(wèn),速度比較快,如果對(duì)他進(jìn)行插入操作的話,就得移動(dòng)很多元素,所以對(duì)數(shù)組進(jìn)行插入操作效率很低!由于連表是隨機(jī)存儲(chǔ)的,鏈表在插入,刪除操作上有很高的效率(相對(duì)數(shù)組),如果要訪問(wèn)鏈表中的某個(gè)元素的話,那就得從鏈表的頭逐個(gè)遍歷,直到找到所需要的元素為止,所以鏈表的隨機(jī)訪問(wèn)的效率就比數(shù)組要低 53、死鎖的四個(gè)條件及處理方法。(1)互斥條件:一個(gè)資源每
20、次只能被一個(gè)進(jìn)程使用。 (2) 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。 (3)不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。 (4)循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。 解決死鎖的方法分為死鎖的預(yù)防,避免,檢測(cè)與恢復(fù)三種54、進(jìn)程調(diào)度策略。先進(jìn)先出算法,最短CPU運(yùn)行期優(yōu)先調(diào)度算法,輪轉(zhuǎn)法,多級(jí)隊(duì)列方法55、驅(qū)動(dòng)程序流程及功能。設(shè)備驅(qū)動(dòng)程序的功能:對(duì)設(shè)備初始化和釋放把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤56、時(shí)間換空間、空間換時(shí)間的例子。冒泡排序
21、 - 時(shí)間換空間快速排序,堆排序 - 空間換時(shí)間 57、MAC層通信協(xié)議有哪些?ISO2110,IEEE802,IEEE802.2 58、關(guān)鍵字static的作用是什么?*在函數(shù)體內(nèi),一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變(該變量存放在靜態(tài)變量區(qū))。 *在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)。 它是一個(gè)本地的全局變量。 *在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。 那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。59、參數(shù)的傳遞方式有幾種?1、值傳遞 2、指針傳遞 嚴(yán)格來(lái)看,只有一種傳遞
22、,值傳遞,指針傳遞也是按值傳遞的,復(fù)制的是地址。60、局部變量能否和全局變量重名? 答:能,局部會(huì)屏蔽全局。要用全局變量,需要使用: 局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個(gè)變量時(shí),會(huì)用到同名的局部變量,而不會(huì)用到全局變量。 對(duì)于有些編譯器而言,在同一個(gè)函數(shù)內(nèi)可以定義多個(gè)同名的局部變量,比如在兩個(gè)循環(huán)體內(nèi)都定義一個(gè)同名的局部變量, 而那個(gè)局部變量的作用域就在那個(gè)循環(huán)體內(nèi)。61、如何引用一個(gè)已經(jīng)定義過(guò)的全局變量? 答:extern可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理, 假定你將那個(gè)變量寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用
23、extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤, 那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。62、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么? 答:可以,在不同的C文件中以static形式來(lái)聲明同名全局變量。 可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連接不會(huì)出錯(cuò)63、語(yǔ)句for(;1;)有什么問(wèn)題?它是什么意思? 答:和while(1)相同。64、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有什么區(qū)別?static函數(shù)與普通函數(shù)有什么區(qū)別? 全局變量(外部變量)的說(shuō)明之前再加static就構(gòu)成
24、了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲(chǔ)方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無(wú)不同。 這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí), 非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效。從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍。static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說(shuō)明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說(shuō)
25、明和定義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說(shuō)明,要使用這些函數(shù)的源文件要包含這個(gè)頭文件static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝65、程序的局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū))中,動(dòng)態(tài)申請(qǐng)數(shù)據(jù)存在于(堆)中。66、-1,2,7,28,126請(qǐng)問(wèn)28和126中間那個(gè)數(shù)是什么?為什么? 答案
26、應(yīng)該是43-1=63規(guī)律是n3-1(當(dāng)n為偶數(shù)0,2,4)n3+1(當(dāng)n為奇數(shù)1,3,5)67、用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路! 設(shè)2個(gè)棧為A,B,一開(kāi)始均為空.入隊(duì):將新元素push入棧A; 出隊(duì):(1)判斷棧B是否為空; (2)如果不為空,則將棧A中所有元素依次pop出并push到棧B; (3)將棧B的棧頂元素pop出;68、.都有那些種類? 人工測(cè)試:個(gè)人復(fù)查、抽查和會(huì)審 機(jī)器測(cè)試:黑盒測(cè)試(針對(duì)系統(tǒng)功能的測(cè)試)和白盒測(cè)試 (測(cè)試函數(shù)功能,各函數(shù)接口)69、堆棧溢出一般是由什么原因?qū)е碌模?沒(méi)有回收垃圾資源。70、寫出float x 與“零值”比較的if語(yǔ)句。 if(x0
27、.&x-0.)71、P地址的編碼分為哪倆部分? IP地址由兩部分組成,網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過(guò)是要和“子網(wǎng)掩碼”按位與上之后才能區(qū)分哪些是網(wǎng)絡(luò)位哪些 是主機(jī)位72、寫一個(gè)程序, 要求功能:求出用1,2,5這三個(gè)數(shù)不同個(gè)數(shù)組合的和為100的組合個(gè)數(shù)。 如:100個(gè)1是一個(gè)組合,5個(gè)1加19個(gè)5是一個(gè)組合。 請(qǐng)用C+語(yǔ)言寫。答案:最容易想到的算法是:設(shè)x是1的個(gè)數(shù),y是2的個(gè)數(shù),z是5的個(gè)數(shù),number是組合數(shù)注意到0=x=100,0=y=50,0=z=20,所以可以編程為:number=0;for (x=0; x=100; x+)for (y=0; y=50; y+)for (z=0; z=20;
28、 z+)if (x+2*y+5*z)=100)number+;73、內(nèi)存對(duì)齊問(wèn)題的原因?平臺(tái)原因(移植原因):不是所有的硬件平臺(tái)都能訪問(wèn)任意地址上的任意數(shù)據(jù);性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊,因?yàn)闉榱嗽L問(wèn)未對(duì)齊的內(nèi)存,處理器需要做兩次內(nèi)存訪問(wèn), 而對(duì)齊的內(nèi)存訪問(wèn)僅需要一次。74、比較一下進(jìn)程和線程的區(qū)別?(1)、調(diào)度:線程是CPU調(diào)度和分派的基本單位(2)、擁有資源:* 進(jìn)程是系統(tǒng)中程序執(zhí)行和資源分配的基本單位* 線程自己一般不擁有資源(除了必不可少的程序計(jì)數(shù)器,一組寄存器和棧),但他可以去訪問(wèn)其所屬進(jìn)程的資源, 如進(jìn)程代碼,數(shù)據(jù)段以及系統(tǒng)資源(已打開(kāi)的文件,I/O設(shè)
29、備等)。(3)系統(tǒng)開(kāi)銷:* 同一進(jìn)程中的多個(gè)線程可以共享同一地址空間,因此它們之間的同步和通信的實(shí)現(xiàn)也比較簡(jiǎn)單* 在進(jìn)程切換的時(shí)候,涉及到整個(gè)當(dāng)前進(jìn)程CPU環(huán)境的保存以及新被調(diào)度運(yùn)行的進(jìn)程的CPU環(huán)境的設(shè)置; 而線程切換只需要保存和設(shè)置少量寄存器的內(nèi)容,并不涉及存儲(chǔ)器管理方面的操作,從而能更有效地使用系統(tǒng)資源和 提高系統(tǒng)吞吐量。75、main() int a5=1,2,3,4,5; int *ptr=(int *)(&a+1);/&a相當(dāng)于變成了行指針,加1則變成了下一行首地址 printf(%d,%d,*(a+1),*(ptr-1);*(a+1)就是a1,*(ptr-1)就是a4,執(zhí)行結(jié)果是
30、2,576、 void getmemory(char *p) p=(char *) malloc(100);strcpy(p,hello world); int main( ) char *str=NULL;getmemory(str);printf(%s/n,str);free(str);return 0; 程序崩潰,getmemory中的malloc 不能返回動(dòng)態(tài)內(nèi)存, free()對(duì)str操作很危險(xiǎn)77、void GetMemory(char *p)p = (char *)malloc(100);void Test(void)char *str = NULL;GetMemory(str)
31、;strcpy(str, hello world);printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:程序崩潰。因?yàn)镚etMemory并不能傳遞動(dòng)態(tài)內(nèi)存,Test函數(shù)中的 str一直都是 NULL。strcpy(str, hello world);將使程序崩潰。void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?
32、答:(1)能夠輸出hello (2)內(nèi)存泄漏78、char *GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:可能是亂碼。因?yàn)镚etMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。79、void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);fre
33、e(str);if(str != NULL) strcpy(str, “world”);printf(str);請(qǐng)問(wèn)運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?答:篡改動(dòng)態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險(xiǎn)。因?yàn)閒ree(str);之后,str成為野指針,if(str != NULL)語(yǔ)句不起作用。野指針不是NULL指針,是指向被釋放的或者訪問(wèn)受限內(nèi)存指針。造成原因:指針變量沒(méi)有被初始化任何剛創(chuàng)建的指針不會(huì)自動(dòng)成為NULL; 指針被free或delete之后,沒(méi)有置NULL; 指針操作超越了變量的作用范圍,比如要返回指向棧內(nèi)存的指針或引用,因?yàn)闂?nèi)存在函數(shù)結(jié)束時(shí)會(huì)被釋放。80、unsigned cha
34、r *p=(unsigned char *)0x unsigned char *q=(unsigned char *)0xp+5 =? 0xq+5 =? 0x81、進(jìn)程間通信方式:管道、命名管道、消息隊(duì)列、共享內(nèi)存、信號(hào)、信號(hào)量、套接字。(1)、 管道( pipe ):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用。 進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。(2)、有名管道 (named pipe) :有名管道也是半雙工的通信方式,但是它允許無(wú)親緣關(guān)系進(jìn)程間的通信。(3)、信號(hào)量( semophore ) :信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來(lái)控制多個(gè)進(jìn)程對(duì)共享資源的訪問(wèn)
35、。 它常作為一種鎖機(jī)制,防止某進(jìn)程正在訪問(wèn)共享資源時(shí),其他進(jìn)程也訪問(wèn)該資源。 因此,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。(4)、消息隊(duì)列( message queue ) : 消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。 消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。(5)、信號(hào) ( sinal ) : 信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生。(6)、共享內(nèi)存( shared memory ) :共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問(wèn)的內(nèi)存, 這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn)。共享內(nèi)存是最
36、快的 IPC 方式,它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制, 如信號(hào)兩,配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步和通信。(7)、套接字( socket ) : 套接字也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同及其間的進(jìn)程通信。82、宏和函數(shù)的優(yōu)缺點(diǎn)?(1)、函數(shù)調(diào)用時(shí),先求出實(shí)參表達(dá)式的值,然后帶入形參。而使用帶參數(shù)的宏只是進(jìn)行簡(jiǎn)單的字符替換。(2)、函數(shù)調(diào)用是在程序運(yùn)行時(shí)處理的,分配臨時(shí)的內(nèi)存單元;而宏展開(kāi)則是在編譯時(shí)進(jìn)行的,在展開(kāi)時(shí)并不分配內(nèi)存單元, 不進(jìn)行值的傳遞處理,也沒(méi)有“返回值”的概念。(3)、對(duì)函數(shù)中的實(shí)參和形參都要定義類型,二者的類型要求一
37、致,應(yīng)進(jìn)行類型轉(zhuǎn)換;而宏不存在類型問(wèn)題,宏名無(wú)類型, 它的參數(shù)也是無(wú)類型,只是一個(gè)符號(hào)代表,展開(kāi)時(shí)帶入指定的字符即可。宏定義時(shí),字符串可以是任何類型的數(shù)據(jù)。(4)、調(diào)用函數(shù)只可得到一個(gè)返回值,而宏定義可以設(shè)法得到幾個(gè)結(jié)果。(5)、使用宏次數(shù)多時(shí),宏展開(kāi)后源程序長(zhǎng),因?yàn)槊看握归_(kāi)一次都使程序增長(zhǎng),而函數(shù)調(diào)用不使源程序變長(zhǎng)。(6)、宏替換不占運(yùn)行時(shí)間,只占編譯時(shí)間;而函數(shù)調(diào)用則占運(yùn)行時(shí)間(分配單元、保留現(xiàn)場(chǎng)、值傳遞、返回)。83、C和c+的不同c和c+的一些不同點(diǎn)(從語(yǔ)言本身的角度):1)c+源于c,c+最重要的特性就是引入了面向?qū)ο髾C(jī)制,class關(guān)鍵字。2)c+中,變量可以再任何地方聲明;c中,
38、局部變量只能在函數(shù)開(kāi)頭聲明。3)c+中,const型常量是編譯時(shí)常量;c中,const常量只是只讀的變量。4)c+有&引用;c沒(méi)有5)c+的struct聲明自動(dòng)將結(jié)構(gòu)類型名typedef;c中struct的名字只在結(jié)構(gòu)標(biāo)簽名字空間中,不是作為一種類型出現(xiàn)6)c語(yǔ)言的main函數(shù)可以遞歸調(diào)用;c+中則不可以7)c中,void *可以隱式轉(zhuǎn)換成其他指針類型;c+中要求現(xiàn)實(shí)轉(zhuǎn)換,否則編譯通不過(guò)84、6.大小端格式問(wèn)題。方法一:void checkCpuMode(void)int i = 0x;char *cp = (char *)&i;if(*cp = 0x78)printf(little endi
39、an);elseprintf(big endiann);方法二:void checkCpuMode(void)int a = 0x;if(char)a = 0x12)printf(big endiann);elseprintf(little endiann);方法三:void checkCpuMode(void) unionshort s;char csizeof(short);un;un.s=0x0102;if(un.0=1&un.c1=2)printf(big endiann);elseprintf(little endiann);85、由C/C+編譯的程序占用的內(nèi)存分為以下幾個(gè)部分1、棧
40、區(qū)(stack): 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。2、堆區(qū)(heap): 一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時(shí)可能由OS回收。 注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表。3、全局區(qū)(static): 全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域,程序結(jié)束后有系統(tǒng)釋放 。4、文字常量區(qū): 常量字符串就是放在這里的, 程序結(jié)束后由系統(tǒng)釋放。5、程序代碼區(qū): 存放函數(shù)體的二進(jìn)制代碼。87、for(m=5;m-;m0)print
41、f(m=%dn,m);輸出:4、3、2、1、088、5abcdef能夠編譯通過(guò),請(qǐng)問(wèn)編譯后的結(jié)果是什么?printf(%dn,5abcdef);輸出f的ACSII值,如果是4abcdef則輸出e的ACSII的值。89、線程同步的方法:信號(hào)量、條件變量、互斥鎖。90、for(i=0;i2,i3,i4;i+)printf(%d n,i); 輸出:0,1,2,3。100、物理地址,虛擬地址,邏輯地址和總線地址的區(qū)別 邏輯地址(Logical Address)是指由程序產(chǎn)生的與段相關(guān)的偏移地址部分。例如,你在進(jìn)行C語(yǔ)言指針編程中,可以讀取指針變量本身值(&操作),實(shí)際上這個(gè)值就是邏輯地址,它是相對(duì)于你當(dāng)前進(jìn)程數(shù)據(jù)段的地址,不和絕對(duì)物理地址相干。只有在Intel實(shí)模式下,邏輯地址才和物理地址相等(因?yàn)閷?shí)模式?jīng)]有分段或分頁(yè)機(jī)制, Cpu不進(jìn)行自動(dòng)地址轉(zhuǎn)換);邏輯也就是在Intel 保護(hù)模式下程序執(zhí)行代碼段限長(zhǎng)內(nèi)的偏移地址(假定代碼段、數(shù)據(jù)段如果完全一樣)。應(yīng)用程序員僅需與邏輯地址打交道,而分段和分頁(yè)機(jī)制對(duì)您來(lái)說(shuō)是完全透明的,僅由系統(tǒng)編程人員涉及。應(yīng)用程序員雖然自己可以直接操作內(nèi)存,那也只能在操作系統(tǒng)給你分配的內(nèi)存段操作。 線性地址(Linear
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)間借用合同新規(guī)定
- 標(biāo)準(zhǔn)教育軟件代理合同書
- 生態(tài)綠化景觀工程合同樣本
- 保健品分銷代理合同標(biāo)準(zhǔn)模板
- 2025年臨時(shí)策劃征用土地合同
- 音視頻數(shù)據(jù)融合分析-深度研究
- 2025年企業(yè)咨詢業(yè)務(wù)合同格式
- 設(shè)備維護(hù)保養(yǎng)標(biāo)準(zhǔn)化-深度研究
- 2025年活動(dòng)治安保障合同標(biāo)準(zhǔn)
- 編程語(yǔ)言演化趨勢(shì)-深度研究
- 2024中考物理真題匯編:電與磁(含解析)
- 2024年小客車指標(biāo)借用協(xié)議3篇
- 中建10t龍門吊安拆安全專項(xiàng)施工方案
- 國(guó)內(nèi)外測(cè)井技術(shù)現(xiàn)狀與展望文檔
- 骨科術(shù)后譫妄患者的護(hù)理
- 大模型專題:2024大模型技術(shù)及其在金融行業(yè)的應(yīng)用探索報(bào)告
- 《肺動(dòng)靜脈瘺》課件
- 約定工資結(jié)清協(xié)議書(2篇)
- 天津地區(qū)高考語(yǔ)文五年高考真題匯編-語(yǔ)言文字應(yīng)用
- 鶴壁海格龍升3萬(wàn)噸溴系列新材料產(chǎn)品環(huán)評(píng)資料環(huán)境影響
- 電梯日管控、周排查、月調(diào)度內(nèi)容表格
評(píng)論
0/150
提交評(píng)論