版權(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. 用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問(wèn)題)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。#define MIN(A,B) (A) = (B) (A) : (B) 4. 嵌入式系統(tǒng)中經(jīng)常要用到無(wú)限循環(huán),你怎么樣用C編寫死循環(huán)呢?這個(gè)問(wèn)題用幾個(gè)解決方案。我首選的方案是: while(1) 一些程序員更喜歡如下方案: for(;) 第三個(gè)方案是用 goto Loop: . goto Loop;5. 用變量a給出下面的
2、定義 a) 一個(gè)整型數(shù)(An integer) b) 一個(gè)指向整型數(shù)的指針(A pointer to an integer) c) 一個(gè)指向指針的的指針,它指向的指針是指向一個(gè)整型數(shù)(A pointer to a pointer to an integer) d) 一個(gè)有10個(gè)整型數(shù)的數(shù)組(An array of 10 integers) e) 一個(gè)有10個(gè)指針的數(shù)組,該指針是指向一個(gè)整型數(shù)的(An array of 10 pointers to integers) f) 一個(gè)指向有10個(gè)整型數(shù)數(shù)組的指針(A pointer to an array of 10 integers) g) 一個(gè)指
3、向函數(shù)的指針,該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)(A pointer to a function that takes an integer as an argument and returns an integer) h) 一個(gè)有10個(gè)指針的數(shù)組,該指針指向一個(gè)函數(shù),該函數(shù)有一個(gè)整型參數(shù)并返回一個(gè)整型數(shù)( An array of ten pointers to functions that take an integer argument and return an integer )答案是: a) int a; / An integer b) int *a; / A pointer to
4、 an integer c) int *a; / A pointer to a pointer to an integer d) int a10; / An array of 10 integers e) int *a10; / An array of 10 pointers to integers f) int (*a)10; / A pointer to an array of 10 integers g) int (*a)(int); / A pointer to a function a that takes an integer argument and returns an int
5、eger h) int (*a10)(int); / An array of 10 pointers to functions that take an integer argument and return an integer 6. 關(guān)鍵字static的作用是什么?這個(gè)簡(jiǎn)單的問(wèn)題很少有人能回答完全。在C語(yǔ)言中,關(guān)鍵字static有三個(gè)明顯的作用: 1). 在函數(shù)體,一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過(guò)程中維持其值不變。 2). 在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)。它是一個(gè)本地的全局變量。 3). 在模塊內(nèi),一個(gè)被聲明為靜
6、態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。 7關(guān)鍵字const是什么含意? const int a; int const a; const int *a; int * const a; int const * a const;前兩個(gè)的作用是一樣,a是一個(gè)常整型數(shù)。第三個(gè)意味著a是一個(gè)指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個(gè)意思a是一個(gè)指向整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個(gè)意味著a是一個(gè)指向常整型數(shù)的常指針(也就是說(shuō),指針指向的整型數(shù)是不可修改的,同時(shí)指針也是不可修
7、改的)。如果應(yīng)試者能正確回答這些問(wèn)題,那么他就給我留下了一個(gè)好印象。8. 關(guān)鍵字volatile有什么含意 并給出三個(gè)不同的例子。一個(gè)定義為volatile的變量是說(shuō)這變量可能會(huì)被意想不到地改變,這樣,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了。精確地說(shuō)就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個(gè)例子: 1). 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器) 2). 一個(gè)中斷服務(wù)子程序中會(huì)訪問(wèn)到的非自動(dòng)變量(Non-automatic variables) 3). 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量 1). 一個(gè)參數(shù)既可以是co
8、nst還可以是volatile嗎?解釋為什么。 2). 一個(gè)指針可以是volatile 嗎?解釋為什么。 3). 下面的函數(shù)有什么錯(cuò)誤: int square(volatile int *ptr) return *ptr * *ptr; Ptr內(nèi)容可能被修改,無(wú)法保證兩次取得同一個(gè)值,應(yīng)該先取出值放入一個(gè)變量中,然后通過(guò)這個(gè)變量來(lái)計(jì)算9. 嵌入式系統(tǒng)總是要用戶對(duì)變量或寄存器進(jìn)行位操作。給定一個(gè)整型變量a,寫兩段代碼,第一個(gè)設(shè)置a的bit 3,第二個(gè)清除a 的bit 3。在以上兩個(gè)操作中,要保持其它位不變。#define BIT3 (0x1 6) puts( 6) : puts(6 13. 評(píng)價(jià)
9、下面的代碼片斷:unsigned int zero = 0; unsigned int compzero = 0xFFFF; /*1s complement of zero */14. 盡管不像非嵌入式計(jì)算機(jī)那么常見,嵌入式系統(tǒng)還是有從堆(heap)中動(dòng)態(tài)分配內(nèi)存的過(guò)程的。那么嵌入式系統(tǒng)中,動(dòng)態(tài)分配內(nèi)存可能發(fā)生的問(wèn)題是什么?主要有三種類型:內(nèi)存泄露、內(nèi)存碎片和內(nèi)存崩潰 內(nèi)存崩潰是內(nèi)存使用最嚴(yán)重的結(jié)果,主要原因有數(shù)組訪問(wèn)越界、寫已經(jīng)釋放的內(nèi)存、指針計(jì)算錯(cuò)誤、訪問(wèn)堆棧地址越界等等。碎片收集的問(wèn)題,變量的持行時(shí)間等等下面的代碼片段的輸出是什么,為什么?char *ptr; if (ptr = (ch
10、ar *)malloc(0) = NULL) puts(Got a null pointer); else puts(Got a valid pointer); 該代碼的輸出是“Got a valid pointer”。15. Typedef 在C語(yǔ)言中頻繁用以聲明一個(gè)已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * typedef struct s * tPS; 答案是:typedef更好。思考下面的例子: dPS p1,p2; tPS p3,p4;第一個(gè)擴(kuò)展為 struct s * p1, p2;上面的代碼定義
11、p1為一個(gè)指向結(jié)構(gòu)的指,p2為一個(gè)實(shí)際的結(jié)構(gòu),這也許不是你想要的。第二個(gè)例子正確地定義了p3 和p4 兩個(gè)指針。16. C語(yǔ)言同意一些令人震驚的結(jié)構(gòu),下面的結(jié)構(gòu)是合法的嗎,如果是它做些什么? int a = 5, b = 7, c; c = a+b;上面的代碼被處理成: c = a+ + b; 因此, 這段代碼持行后a = 6, b = 7, c = 12。 17.找錯(cuò)題試題1:void test1()char string10;char* str1 = ;strcpy( string, str1 ); 試題2:void test2()char string10, str110;int i;f
12、or(i=0; i10; i+)str1i = a;strcpy( string, str1 ); 試題3:void test3(char* str1)char string10;if( strlen( str1 ) = 10 )strcpy( string, str1 ); 解答:試題1字符串str1需要11個(gè)字節(jié)才能存放下(包括末尾的0),而string只有10個(gè)字節(jié)的空間,strcpy會(huì)導(dǎo)致數(shù)組越界;對(duì)試題2,如果面試者指出字符數(shù)組str1不能在數(shù)組內(nèi)結(jié)束可以給3分;如果面試者指出strcpy(string, str1)調(diào)用使得從str1內(nèi)存起復(fù)制到string內(nèi)存起所復(fù)制的字節(jié)數(shù)具有不
13、確定性可以給7分,在此基礎(chǔ)上指出庫(kù)函數(shù)strcpy工作方式的給10分;對(duì)試題3,if(strlen(str1) = 10)應(yīng)改為if(strlen(str1) = - epsinon) & (x =”或“=”形式。如果寫成if (x = 0.0),則判為錯(cuò),得0分。23:以下為windows nt下的32位c+程序,請(qǐng)計(jì)算sizeof的值void func ( char str100 )sizeof( str ) = ?void *p = malloc( 100 );sizeof ( p ) = ? 解答:sizeof( str ) = 4sizeof ( p ) = 4 char str10
14、;cout sizeof(str) endl; 24:寫一個(gè)“標(biāo)準(zhǔn)”宏min,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。另外,當(dāng)你寫下面的代碼時(shí)會(huì)發(fā)生什么事?least = min(*p+, b); 解答:#define min(a,b) (a) = (b) ? (a) : (b) min(*p+, b)會(huì)產(chǎn)生宏的副作用25為什么標(biāo)準(zhǔn)頭文件都有類似以下的結(jié)構(gòu)? #ifndef _incvxworksh#define _incvxworksh #ifdef _cplusplusextern c #endif /*.*/ #ifdef _cplusplus#endif #endif /* _incvxw
15、orksh */ 解答:頭文件中的編譯宏#ifndef_incvxworksh#define_incvxworksh#endif 的作用是防止被重復(fù)引用。為了實(shí)現(xiàn)c和c+的混合編程,c+提供了c連接交換指定符號(hào)extern c來(lái)解決名字匹配問(wèn)題,函數(shù)聲明前加上extern c后,則編譯器就會(huì)按照c語(yǔ)言的方式將該函數(shù)編譯為_foo,這樣c語(yǔ)言中就可以調(diào)用c+的函數(shù)了。26 編寫一個(gè)函數(shù),作用是把一個(gè)char組成的字符串循環(huán)右移n個(gè)。比如原來(lái)是“abcdefghi”如果n=2,移位后應(yīng)該是“hiabcdefgh” 函數(shù)頭是這樣的:/pstr是指向以0結(jié)尾的字符串的指針/steps是要求移動(dòng)的nvo
16、id loopmove ( char * pstr, int steps )/請(qǐng)?zhí)畛? 解答:正確解答1:void loopmove ( char *pstr, int steps )int n = strlen( pstr ) - steps;char tmpmax_len; strcpy ( tmp, pstr + n ); strcpy ( tmp + steps, pstr); *( tmp + strlen ( pstr ) ) = 0;strcpy( pstr, tmp ); 正確解答2:void loopmove ( char *pstr, int steps )int n =
17、strlen( pstr ) - steps;char tmpmax_len; memcpy( tmp, pstr + n, steps ); memcpy(pstr + steps, pstr, n ); memcpy(pstr, tmp, steps ); 27 static關(guān)鍵字至少有下列n個(gè)作用:(1)函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值;(2)在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn);(3)在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函
18、數(shù)的使用范圍被限制在聲明它的模塊內(nèi);28const關(guān)鍵字至少有下列n個(gè)作用:(1)欲阻止一個(gè)變量被改變,可以使用const關(guān)鍵字。在定義該const變量時(shí),通常需要對(duì)它進(jìn)行初始化,因?yàn)橐院缶蜎]有機(jī)會(huì)再去改變它了;(2)對(duì)指針來(lái)說(shuō),可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時(shí)指定為const;(3)在一個(gè)函數(shù)聲明中,const可以修飾形參,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;(4)對(duì)于類的成員函數(shù),若指定其為const類型,則表明其是一個(gè)常函數(shù),不能修改類的成員變量;29:請(qǐng)寫一個(gè)c函數(shù),若處理器是big_endian的,則返回0;若是little_e
19、ndian的,則返回1解答:int checkcpu()union w int a;char b; c;c.a = 1;return (c.b = 1); 30. 堆和棧的區(qū)別?棧區(qū)(stack)- 由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。堆區(qū)(heap) - 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。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í)這
20、些存儲(chǔ)單元自動(dòng)被釋放。棧內(nèi)存分配運(yùn)算內(nèi)置于處理器的指令集。3) 從堆上分配,亦稱動(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)題也最多。31.struct 和 class 的區(qū)別答案:struct 的成員默認(rèn)是公有的,而類的成員默認(rèn)是私有的。struct 和 class 在其他方面是功能相當(dāng)?shù)摹?從感情上講,大多數(shù)的開發(fā)者感到類和結(jié)構(gòu)有很大的差別。感覺上結(jié)構(gòu)僅僅象一堆缺乏封裝和功能的開放的內(nèi)存位,而類就象活的并且可靠的社會(huì)成員,它有智能服務(wù),有牢固的封裝屏障和
21、一個(gè)良好定義的接口。既然大多數(shù)人都這么認(rèn)為,那么只有在你的類有很少的方法并且有公有數(shù)據(jù)(這種事情在良好設(shè)計(jì)的系統(tǒng)中是存在的!)時(shí),你也許應(yīng)該使用 struct 關(guān)鍵字,否則,你應(yīng)該使用 class 關(guān)鍵字。 32.#include stdafx.h#define SQR(X) X*Xint main(int argc, char* argv)int a = 10;int k = 2;int m = 1;a /= SQR(k+m)/SQR(k+m); printf(%dn,a); return 0;這道題目的結(jié)果是什么啊? 2+1*2+1/2+1*2+1=2+2+0.5+2+1=-33.cons
22、t 符號(hào)常量;(1)const char *p(2)char const *p(3)char * const p說(shuō)明上面三種描述的區(qū)別;如果const位于星號(hào)的左側(cè),則const就是用來(lái)修飾指針?biāo)赶虻淖兞?,即指針指向?yàn)槌A?;如果const位于星號(hào)的右側(cè),const就是修飾指針本身,即指針本身是常量。(1)const char *p一個(gè)指向char類型的const對(duì)象指針,p不是常量,我們可以修改p的值,使其指向不同的char,但是不能改變它指向非char對(duì)象,如:const char *p;char c1=a;char c2=b;p=&c1;/okp=&c2;/ok*p=c1;/error(
23、2)char const *p(3)char * const p這兩個(gè)好象是一樣的,此時(shí)*p可以修改,而p不能修改。(4)const char * const p這種是地址及指向?qū)ο蠖疾荒苄薷摹?4.下面是C語(yǔ)言中兩種if語(yǔ)句判斷方式。請(qǐng)問(wèn)哪種寫法更好?為什么?int n;if (n = 10) / 第一種判斷方式if (10 = n) / 第二種判斷方式如果少了個(gè)=號(hào),編譯時(shí)就會(huì)報(bào)錯(cuò),減少了出錯(cuò)的可能行,可以檢測(cè)出是否少了=35.寫出運(yùn)行結(jié)果:/ test2 union V struct X unsigned char s1:2;unsigned char s2:3;unsigned cha
24、r s3:3; x;unsigned char c; v; v.c = 100; printf(%d, v.x.s3); 3 /01136.用C+寫個(gè)程序,如何判斷一個(gè)操作系統(tǒng)是16位還是32位的?不能用sizeof()函數(shù)A1:16位的系統(tǒng)下,int i = 65536;cout i; / 輸出0;int i = 65535;cout i; / 輸出-1;32位的系統(tǒng)下,int i = 65536;cout i; / 輸出65536;int i = 65535;cout 65536 ) cout32 bitendl;else cout16 bitendl;37.C和C+有什么不同?從機(jī)制上:
25、c是面向過(guò)程的(但c也可以編寫面向?qū)ο蟮某绦颍?;c+是面向?qū)ο蟮?,提供了類。但是,c+編寫面向?qū)ο蟮某绦虮萩容易從適用的方向:c適合要求代碼體積小的,效率高的場(chǎng)合,如嵌入式;c+適合更上層的,復(fù)雜的; llinux核心大部分是c寫的,因?yàn)樗窍到y(tǒng)軟件,效率要求極高。從名稱上也可以看出,c+比c多了+,說(shuō)明c+是c的超集;那為什么不叫c+而叫c+呢,是因?yàn)閏+比c來(lái)說(shuō)擴(kuò)充的東西太多了,所以就在c后面放上兩個(gè)+;于是就成了c+C語(yǔ)言是結(jié)構(gòu)化編程語(yǔ)言,C+是面向?qū)ο缶幊陶Z(yǔ)言。C+側(cè)重于對(duì)象而不是過(guò)程,側(cè)重于類的設(shè)計(jì)而不是邏輯的設(shè)計(jì)。38.在不用第三方參數(shù)的情況下,交換兩個(gè)參數(shù)的值#include v
26、oid main() int i=60; int j=50; i=i+j; j=i-j; i=i-j; printf(i=%dn,i); printf(j=%dn,j);方法二:i=j;j=i;i=j;方法三:/ 用加減實(shí)現(xiàn),而且不會(huì)溢出a = a+b-(b=a).進(jìn)程間通信的方式有?進(jìn)程間通信的方式有 共享內(nèi)存, 管道 ,Socket ,消息隊(duì)列 ,等39 struct A char t:4; char k:4; unsigned short i:8; unsigned long m; sizeof(A)=?(不考慮邊界對(duì)齊)740給定結(jié)構(gòu)struct A char t:4; char k:
27、4; unsigned short i:8; unsigned long m;問(wèn)sizeof(A) = ?給定結(jié)構(gòu)struct A char t:4; 4位 char k:4; 4位 unsigned short i:8; 8位 unsigned long m; / 偏移2字節(jié)保證4字節(jié)對(duì)齊; / 共8字節(jié)41下面的函數(shù)實(shí)現(xiàn)在一個(gè)固定的數(shù)上加上一個(gè)數(shù),有什么錯(cuò)誤,改正 int add_n(int n) static int i=100; i+=n; return i; 答:因?yàn)閟tatic使得i的值會(huì)保留上次的值。去掉static就可了42 union a int a_int1;double
28、a_double;int a_int2;typedef structa a1;char y; b;class cdouble c_double;b b1;a a2;輸出coutsizeof(c)j+) & (i+ = j) i+=j;答:i = 544 unsigned short array=1,2,3,4,5,6,7;int i = 3;*(array + i) = ?答:445 試編寫函數(shù)判斷計(jì)算機(jī)的字節(jié)存儲(chǔ)順序是開序(little endian)還是降序(bigendian)答:bool IsBigendian()unsigned short usData = 0x1122;unsig
29、ned char *pucData = (unsigned char*)&usData;return (*pucData = 0x22);46簡(jiǎn)述Critical Section和Mutex的不同點(diǎn)答:對(duì)幾種同步對(duì)象的總結(jié)1.Critical SectionA.速度快B.不能用于不同進(jìn)程C.不能進(jìn)行資源統(tǒng)計(jì)(每次只可以有一個(gè)線程對(duì)共享資源進(jìn)行存取)2.MutexA.速度慢B.可用于不同進(jìn)程C.不能進(jìn)行資源統(tǒng)計(jì)3.SemaphoreA.速度慢B.可用于不同進(jìn)程C.可進(jìn)行資源統(tǒng)計(jì)(可以讓一個(gè)或超過(guò)一個(gè)線程對(duì)共享資源進(jìn)行存取)4.EventA.速度慢B.可用于不同進(jìn)程C.可進(jìn)行資源統(tǒng)計(jì)47 請(qǐng)指出下
30、列程序中的錯(cuò)誤并且修改void GetMemory(char *p) p=(char *)malloc(100);void Test(void) char *str=NULL; GetMemory=(str); strcpy(str,hello world); printf(str);A:錯(cuò)誤-參數(shù)的值改變后,不會(huì)傳回GetMemory并不能傳遞動(dòng)態(tài)內(nèi)存,Test函數(shù)中的 str一直都是 NULL。strcpy(str, hello world);將使程序崩潰。修改如下:char *GetMemory() char *p=(char *)malloc(100); return p;void T
31、est(void) char *str=NULL; str=GetMemory() strcpy(str,hello world); printf(str);方法二:void GetMemory2(char *p)變?yōu)槎?jí)指針.void GetMemory2(char *p, int num)*p = (char *)malloc(sizeof(char) * num);48用C 寫一個(gè)輸入的整數(shù),倒著輸出整數(shù)的函數(shù),要求用遞歸方法 ;答:void fun( int a )printf( %d, a%10 );a /= 10;if( a =0 )return;fun( a );49.頭文件中的
32、 ifndef/define/endif 干什么用?預(yù)處理答:防止頭文件被重復(fù)引用50. i nclude 和 i nclude “filename.h” 有什么區(qū)別?答:前者用來(lái)包含開發(fā)環(huán)境提供的庫(kù)頭文件,后者用來(lái)包含自己編寫的頭文件。51.在C+ 程序中調(diào)用被 C 編譯器編譯后的函數(shù),為什么要加 extern “C”聲明?答:函數(shù)和變量被C+編譯后在符號(hào)庫(kù)中的名字與C語(yǔ)言的不同,被extern C修飾的變量和函數(shù)是按照C語(yǔ)言方式編譯和連接的。由于編譯后的名字不同,C+程序不能直接調(diào)用C 函數(shù)。C+提供了一個(gè)C 連接交換指定符號(hào)extern“C”來(lái)解決這個(gè)問(wèn)題。52. 回答下面的問(wèn)題(6分)
33、(1).Void GetMemory(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é)果?答:輸出“hello”(2). void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);prin
34、tf(str);請(qǐng)問(wèn)運(yùn)行Test 函數(shù)會(huì)有什么樣的結(jié)果?答:輸出“world”(3). 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é)果?答:無(wú)效的指針,輸出不確定53. 編寫strcat函數(shù)(6分)已知strcat函數(shù)的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串
35、。(1)不調(diào)用C+/C 的字符串庫(kù)函數(shù),請(qǐng)編寫函數(shù) strcat答:char * strcat (char * dst, const char * src)char * cp = dst;while( *cp )cp+; /* find end of dst */while( *cp+ = *src+ ) ; /* Copy src to end of dst */return( dst ); /* return dst */(2)strcat能把strSrc 的內(nèi)容連接到strDest,為什么還要char * 類型的返回值?答:方便賦值給其他變量54.程序什么時(shí)候應(yīng)該使用線程,什么時(shí)候單線程
36、效率高。答:1耗時(shí)的操作使用線程,提高應(yīng)用程序響應(yīng)2并行操作時(shí)使用線程,如C/S架構(gòu)的服務(wù)器端并發(fā)線程響應(yīng)用戶的請(qǐng)求。3多CPU系統(tǒng)中,使用線程提高CPU利用率4改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。其他情況都使用單線程。55.TCP/IP 建立連接的過(guò)程?(3-way shake)答:在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務(wù),采用三次握手建立一個(gè)連接。第一次握手:建立連接時(shí),客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn);第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的
37、SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);第三次握手:客戶端收到服務(wù)器的SYNACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。56.ICMP是什么協(xié)議,處于哪一層?答:Internet控制報(bào)文協(xié)議,處于網(wǎng)絡(luò)層(IP層)57 winsock建立連接的主要實(shí)現(xiàn)步驟?答:服務(wù)器端:socker()建立套接字,綁定(bind)并監(jiān)聽(listen),用accept()等待客戶端連接??蛻舳耍簊ocker()建立套接字,連接(connect)服
38、務(wù)器,連接上后使用send()和recv(),在套接字上寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接字。服務(wù)器端:accept()發(fā)現(xiàn)有客戶端連接,建立一個(gè)新的套接字,自身重新開始等待連接。該新產(chǎn)生的套接字使用send()和recv()寫讀數(shù)據(jù),直至數(shù)據(jù)交換完畢,closesocket()關(guān)閉套接字。58 動(dòng)態(tài)連接庫(kù)的兩種方式?答:調(diào)用一個(gè)DLL中的函數(shù)有兩種方法:1載入時(shí)動(dòng)態(tài)鏈接(load-time dynamic linking),模塊非常明確調(diào)用某個(gè)導(dǎo)出函數(shù),使得他們就像本地函數(shù)一樣。這需要鏈接時(shí)鏈接那些函數(shù)所在DLL的導(dǎo)入庫(kù),導(dǎo)入庫(kù)向系統(tǒng)提供了載入DLL時(shí)所需的信息及
39、DLL函數(shù)定位。 2運(yùn)行時(shí)動(dòng)態(tài)鏈接(run-time dynamic linking),運(yùn)行時(shí)可以通過(guò)LoadLibrary或LoadLibraryEx函數(shù)載入DLL。DLL載入后,模塊可以通過(guò)調(diào)用GetProcAddress獲取DLL函數(shù)的出口地址,然后就可以通過(guò)返回的函數(shù)指針調(diào)用DLL函數(shù)了。如此即可避免導(dǎo)入庫(kù)文件了59 IP組播有那些好處?答:Internet上產(chǎn)生的許多新的應(yīng)用,特別是高帶寬的多媒體應(yīng)用,帶來(lái)了帶寬的急劇消耗和網(wǎng)絡(luò)擁擠問(wèn)題。組播是一種允許一個(gè)或多個(gè)發(fā)送者(組播源)發(fā)送單一的數(shù)據(jù)包到多個(gè)接收者(一次的,同時(shí)的)的網(wǎng)絡(luò)技術(shù)。組播可以大大的節(jié)省網(wǎng)絡(luò)帶寬,因?yàn)闊o(wú)論有多少個(gè)目標(biāo)地
40、址,在整個(gè)網(wǎng)絡(luò)的任何一條鏈路上只傳送單一的數(shù)據(jù)包。所以說(shuō)組播技術(shù)的核心就是針對(duì)如何節(jié)約網(wǎng)絡(luò)資源的前提下保證服務(wù)質(zhì)量。60.描述實(shí)時(shí)系統(tǒng)的基本特性 在特定時(shí)間內(nèi)完成特定的任務(wù),實(shí)時(shí)性與可靠性。61.全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別? 全局變量?jī)?chǔ)存在靜態(tài)數(shù)據(jù)庫(kù),局部變量在堆棧。62.什么是平衡二叉樹? 左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對(duì)值不大于1。63.堆棧溢出一般是由什么原因?qū)е碌模?沒有回收垃圾資源。64.冒泡排序算法的時(shí)間復(fù)雜度是什么? 時(shí)間復(fù)雜度是O(n2)。65.Internet采用哪種網(wǎng)絡(luò)協(xié)議?該協(xié)議的主要層次結(jié)構(gòu)? Tcp/Ip協(xié)議 主要層次結(jié)
41、構(gòu)為: 應(yīng)用層/傳輸層/網(wǎng)絡(luò)層/數(shù)據(jù)鏈路層/物理層。66.Internet物理地址和IP地址轉(zhuǎn)換采用什么協(xié)議? ARP (Address Resolution Protocol)(地址解析協(xié)議)67.IP地址的編碼分為哪倆部分? IP地址由兩部分組成,網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。不過(guò)是要和“子網(wǎng)掩碼”按位與上之后才能區(qū)分哪些是網(wǎng)絡(luò)位哪些是主機(jī)位。68.不能做switch()的參數(shù)類型是:switch的參數(shù)不能為實(shí)型。注:必須是整數(shù)型常量,包括char,short,int,long等,不能是浮點(diǎn)數(shù)。Int main()Float a=3;Switch(a)Case 3:Printf(“a”);Return
42、0;/error C2450: switch expression of type float is illegal69、局部變量能否和全局變量重名? 答:能,局部會(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)。70、如何引用一個(gè)已經(jīng)定義過(guò)的全局變量? 答:extern 可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來(lái)引用某個(gè)在頭文件中聲明的全局變理,假定你將那個(gè)變寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在連接期間報(bào)錯(cuò)。71、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么? 答:可以,在不同的C文件中以static形式來(lái)聲明同名全局變量。 可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此變量賦初值,此時(shí)連
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電子商務(wù)法律環(huán)境評(píng)估及合同標(biāo)的合規(guī)審查3篇
- 2025年度電商平臺(tái)商品陳列優(yōu)化與用戶體驗(yàn)提升協(xié)議2篇
- 2025年度個(gè)人教育培訓(xùn)平臺(tái)合作協(xié)議書4篇
- 2025年度二手房買賣合同(含房屋交易稅費(fèi)繳納及減免政策)4篇
- 二零二五年度農(nóng)產(chǎn)品線上線下鋪貨合作協(xié)議3篇
- 2025年度醫(yī)院檢驗(yàn)科室承包合作協(xié)議范本4篇
- 二零二五年度綠色航運(yùn)貨運(yùn)合同規(guī)范文本4篇
- 2025年度全國(guó)旅游景區(qū)資源整合與合作開發(fā)合同4篇
- 二零二五年度船舶保險(xiǎn)份額轉(zhuǎn)讓與理賠服務(wù)協(xié)議4篇
- 二零二五年度木材國(guó)際貿(mào)易承運(yùn)代理服務(wù)合同2篇
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗(yàn)第1部分:桌類強(qiáng)度和耐久性
- 第三方在線糾紛解決機(jī)制(ODR)述評(píng),國(guó)際商法論文
- 第5章-群體-團(tuán)隊(duì)溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團(tuán)南部區(qū)域養(yǎng)護(hù)標(biāo)準(zhǔn)圖例
- 排水許可申請(qǐng)表
- 低血糖的觀察和護(hù)理課件
- 計(jì)量檢定校準(zhǔn)技術(shù)服務(wù)合同協(xié)議書
評(píng)論
0/150
提交評(píng)論