freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言終極面試寶典c語言面試必備-wenkub

2023-04-08 01:33:19 本頁面
 

【正文】 作系統(tǒng)有一個記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請時,會遍歷該鏈表,尋找第一個空間大于所申請空間的堆結(jié)點,然后將該結(jié)點從空閑結(jié)點鏈表中刪除,并將該結(jié)點的空間分配給程序,另外,對于大多數(shù)系統(tǒng),會在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語句才能正確的釋放本內(nèi)存空間。系統(tǒng)自動在棧中為b開辟空間heap:需要程序員自己申請,并指明大小,在c中malloc函數(shù)如p1=(char*)malloc(10)。 p2 = (char*)malloc(20)。 char *p2。 intb。 //全局未初始化區(qū) //全局初始化區(qū) int a=0。程序結(jié)束后由系統(tǒng)釋放。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。僅在本文件。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯誤。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲方式??梢栽诓煌腃文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯。1局部變量能否和全局變量重名?答:能,局部會屏蔽全局。描述實時系統(tǒng)的基本特性答 :在特定時間內(nèi)完成特定的任務(wù),實時性與可靠性。指針通過某個指針變量指向一個對象后,對它所指向的變量間接操作。這是一個應(yīng)試者的嚴(yán)重的缺點,因為他顯然不懂得本地化數(shù)據(jù)和代碼范圍的好處和重要性。它是一個本地的全局變量。第一部分:基本概念及其它問答題關(guān)鍵字static的作用是什么?這個簡單的問題很少有人能回答完全。3). 在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用?!耙谩迸c指針的區(qū)別是什么?答 、1) 引用必須被初始化,指針不必。程序中使用指針,程序的可讀性差;而引用本身就是目標(biāo)變量的別名,對引用的操作就是對目標(biāo)變量的操作。全局變量和局部變量在內(nèi)存中是否有區(qū)別?如果有,是什么區(qū)別?答 :全局變量儲存在靜態(tài)數(shù)據(jù)區(qū),局部變量在堆棧中。要用全局變量,需要使用::局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個變量時,會用到同名的局部變量,而不會用到全局變量。1語句for( ;1 ;)有什么問題?它是什么意思?答 、和while(1)相同,無限循環(huán)。 這兩者在存儲方式上并無不同。從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。堆區(qū)(heap)—一般由程序員分配釋放,若程序員不釋放,程序結(jié)束時可能由OS回收。文字常量區(qū)—常量字符串就是放在這里的。 char *p1。 main()棧 //棧 static int c=0; p1 = (char*)malloc(10)。 //123456\0放在常量區(qū),編譯器可能會將它與p3所向123456優(yōu)化成一個地方。在C++中用new運算符如p2=(char*)malloc(10)。另外,由于找到的堆結(jié)點的大小不一定正好等于申請的大小,系統(tǒng)會自動的將多余的那部分重新放入空閑鏈表中。堆:堆是向高地址擴展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。(4)申請效率的比較:棧:由系統(tǒng)自動分配,速度較快。(5)堆和棧中的存儲內(nèi)容棧:在函數(shù)調(diào)用時,第一個進棧的是主函數(shù)中后的下一條指令(函數(shù)調(diào)用語句的下一條可執(zhí)行語句)的地址,然后是函數(shù)的各個參數(shù),在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧的,然后是函數(shù)中的局部變量。堆中的具體內(nèi)容由程序員安排。比如:includevoidmain(){char a=1。a = p[1]。0040106D8B55ECmovedx,dwordptr[ebp14h]004010708A4201moval,byteptr[edx+1]004010738845FCmovbyteptr[ebp4],al第一種在讀取時直接就把字符串中的元素讀到寄存器cl中,而第二種則要先把指針值讀到edx中,在根據(jù)edx讀取字符,顯然慢了。c提供的預(yù)處理功能主要有以下三種:1)宏定義 2)文件包含 3)條件編譯 總是使用不經(jīng)常改動的大型代碼體。去年Dan Saks已經(jīng)在他的文章里完全概括了const的所有用法,因此ESP(譯者:Embedded Systems Programming),只要能說出const意味著“只讀”就可以了。int const a。前兩個的作用是一樣,a是一個常整型數(shù)。如果應(yīng)試者能正確回答這些問題,那么他就給我留下了一個好印象。)2). 通過給優(yōu)化器一些附加的信息,使用關(guān)鍵字const也許能產(chǎn)生更緊湊的代碼。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。不懂得volatile內(nèi)容將會帶來災(zāi)難。3). 下面的函數(shù)有什么錯誤:int square(volatile int *ptr){return *ptr * *ptr。它是const因為程序不應(yīng)該試圖去修改它。3). 這段代碼的有個惡作劇。return a * b。return a * a。例如全局變量,static 變量。3) 從堆上分配,亦稱動態(tài)內(nèi)存分配。1) const 常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。 2) 有些集成化的調(diào)試工具可以對const 常量進行調(diào)試,但是不能對宏常量進行調(diào)試。 a[0] = ‘X’。sizeof(p),p 為指針得到的是一個 指針變量的字節(jié)數(shù),而不是p 所指的內(nèi)存容量。 char *p = a。 // 4 字節(jié)而不是100 字節(jié) }2分別寫出BOOL,int,float,指針類型的變量a 與“零”的比較語句。 if ( !a ) or if(a)int : if ( a == 0)float : if ( a EXP amp。endif3論述含參數(shù)的宏與函數(shù)的優(yōu)缺點答: 帶參宏 函數(shù)處理時間 編譯時 程序運行時參數(shù)類型 沒有參數(shù)類型問題 定義實參、形參類型處理過程 不分配內(nèi)存 分配內(nèi)存程序長度 變長 不變運行速度 不占運行時間 調(diào)用和返回占用時間3用兩個棧實現(xiàn)一個隊列的功能?要求給出算法和思路!答 、設(shè)2個棧為A,B, 一開始均為空.入隊:將新元素push入棧A。如果一個應(yīng)試者給出這個作為方案,我將用這個作為一個機會去探究他們這樣做的基本原理。應(yīng)試者如給出上面的方案,這說明或者他是一個匯編語言程序員(這也許是好事)或者他是一個想進入新領(lǐng)域的BASIC/FORTRAN程序員。對這個問題有三種基本的反應(yīng)1)不知道如何下手。我最近不幸看到 Infineon為其較復(fù)雜的通信芯片寫的驅(qū)動程序,它用到了bit fields因此完全對我無用,因為我的編譯器用其它的方式來實現(xiàn)bit fields的。最佳的解決方案如下:define BIT3 (0x1 3)static int a。 a |= BIT3。 a amp。=~操作。寫代碼去完成這一任務(wù)。A more obscure approach is: 一個較晦澀的方法是: *(int * const)(0x67a9) = 0xaa55。下面的代碼就使用了__interrupt關(guān)鍵字去定義了一個中斷服務(wù)子程序(ISR),請評論一下這段代碼的。 double area = PI * radius * radius。 printf(\nArea = %f, area)。 return area。如果你沒有看到這一點,你被雇用的機會等同第一項。4) 與第三點一脈相承,printf()經(jīng)常有重入和性能上的問題。那么嵌入式系統(tǒng)中,動態(tài)分配內(nèi)存可能發(fā)生的問題是什么?這里,我期望應(yīng)試者能提到內(nèi)存碎片,碎片收集的問題,變量的持行時間等等。這就是上面的代碼,該代碼的輸出是Got a valid pointer。也可以用預(yù)處理器做類似的事。答案是:typedef更好。 上面的代碼定義p1為一個指向結(jié)構(gòu)的指,p2為一個實際的結(jié)構(gòu),這也許不是你想要的。 // A pointer to an integerc) int **a。 // A pointer to an array of 10 integersg) int (*a)(int)。\(b)=(a)(b)。如果要使變量在其他模塊也有意義的話,需要使用extern關(guān)鍵字。原因是當(dāng)表達式中存在有符號類型和無符號類型時所有的操作數(shù)都自動轉(zhuǎn)換為無符號類型。評價下面的代碼片斷:unsigned int zero = 0。應(yīng)編寫如下:unsigned int pzero = ~0。c = a+++b。因此,上面的代碼被處理成:c = a++ + b。我發(fā)現(xiàn)這個問題的最大好處是這是一個關(guān)于代碼編寫風(fēng)格,代碼的可讀性,代碼的可修改性的好的話題。} DATE。} too。DATE是一個union, 變量公用空間. 里面最大的變量類型是int[5], 占用20個字節(jié). 所以它的大小是20data是一個struct, 每個變量分開占用空間. 依次為int4 + DATE20 + double8 = 32.所以結(jié)果是 20 + 32 = 52.當(dāng)然...在某些16位編輯器下, int可能是2字節(jié),那么結(jié)果是 int2 + DATE10 + double8 = 20請寫出下列代碼的輸出內(nèi)容includemain(){int a,b,c,d。d=10*a++。}int multi(int*a,int*b,int*c){return(*c=*a**b)。inc。arg1, arg2)。a)。 int len=strlen(src)。 while(len!=0) 1 d++=s。int len = strlen(src)。src[len1]。free(dest)。char t。 str[i]=str[leni1]。}請問下面程序有什么錯誤? int a[60][250][1000],i,j,k。j答案:把循環(huán)語句內(nèi)外換一下請問下面程序會出現(xiàn)什么情況?. define Max_CB 500 void LmiQueryCSmd(Struct MSgCB * pmsg) { unsigned char ucCmdNum。 }答案:死循環(huán)以下3個有什么區(qū)別char * const p。const char str4[] = abc。char *str8 = abc。cout ( str7 == str8 ) endl。 ++i ) if( 39。 str[i]=39。39。cout str字符長度為: sizeof(str)/sizeof(str[0]) endl。根據(jù)語法,sizeof如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動態(tài)分配的或外部數(shù)組大小。a+1)。a+1)。而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同a是長度為5的int數(shù)組指針,所以要加 5*sizeof(int)所以ptr實際是a[5]但是prt與(amp。a+1是下一個對象的地址,即a[5].1請問以下代碼有什么問題:int main(){char a。printf(str)。char* s=AAA。printf(%s,s)。然后又因為是常量,所以對是s[0]的賦值操作是不合法的。const int *d=amp。int const *f const =amp。b。a。a。b = a b。a = a^b。 } int main( ) { char *str=NULL。 return 0。 printf(%d,x)。首先要將0x100000強制轉(zhuǎn)換成函數(shù)指針,即:(void (*)())0x100000然后再調(diào)用它:*((void (*)())0x100000)()。printf(~A = %u\n, ~A)。所以輸出4294967285第二題,c=0x10,輸出的是int,最高位為1,是負(fù)數(shù),所以它的值就是0x00的補碼就是128,所以輸出-128。 GetMemory(amp。 if(str!=NULL) { strcpy(str,world)。free 只是釋放的str指向的內(nèi)存空間,它本身的值還是存在的.所以free之后,有一個好的習(xí)慣就是將str=NULL.此時str指向空間的內(nèi)存已被回收,如果輸出語句之前還存在分配空間的操作的話,這段存儲空間是可能被重新分配給其他變量的,盡管這段程序確實是存在大大的問題(上面各位已經(jīng)說得很清楚了),但是通常會打印出world來。2char a[10],strlen(a)為什么等于15?運行的結(jié)果include include void main(){char aa[10]。/*str是一個數(shù)組指針,即指向數(shù)組的指針.*/char *str[20]。 unsigned short i:8。 4位 char k:4。 // 共8字節(jié)
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1