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

正文內(nèi)容

單片機面試筆試大全-文庫吧資料

2024-08-16 01:44本頁面
  

【正文】 len = 4 ) { *d++ = *s++。 } } else if ( dst src ) { d = (char *)dst。 len = 4。 *d = *s。 while ( len = 4 ) { *d = *s。 if ( dst src ) { d = (char *)dst + len 1。 if (len == 0) return dst。 void* memcpy( void *dst, const void *src, unsigned int len ) { register char *d。}(2).已知memcpy的函數(shù)原型:void *memcpy(void *dest, void *src, unsigned int count)。 這個代碼塊的原則是:函數(shù)功能已實現(xiàn)完畢,如何正確地收尾 在本函數(shù)中,本代碼塊就一句話,返回正確的地址。盡管代碼寫的沒有突出這一點,但應(yīng)聘時需要記?。核凶址僮鳎疾灰浗Y(jié)尾的‘\0’!很多學(xué)員面試卡在這個地方而不自知! while( (*p_dst ++ = * p_src ++) != ‘\0’)。這是函數(shù)的功能主體。 }if (p_dst == p_src) {return p_dst。判斷為空時NULL放在等于號的前面,這是良好的工程習慣,常量在前。【注意點3】這是函數(shù)step2:入?yún)⒂行詸z查,沒有這一步的人直接被判死刑。 這個代碼塊的原則是:變量定義放在函數(shù)開始,且要初始化。答案:【注意點1】有的公司不提供函數(shù)聲明,這里面試官考察兩點:其一,是否有const,這涉及到參數(shù)的安全性,是否會有可能被函數(shù)修改(原則上,不允許被函數(shù)修改的入?yún)?,都需要用const限定?。黄涠?,入?yún)⒚欠褚?guī)范,首先從名字能看出誰是目的誰是源頭,其次是從名字能看出是指針。不調(diào)用C++/C 的字符串庫函數(shù),請編寫函數(shù) strcpy。這個題目是區(qū)分應(yīng)屆生和有編程經(jīng)驗人的標志。b)。 //第3行,不許改 change(amp。 //第2行,不許改 int *p = amp。 *p = p_b;}void main(){ int a = 10。80%的學(xué)員錯在:沒有成功修改指針的值。//第4行,可以改}【面試考察點】規(guī)則:如果通過函數(shù)修改一個變量的值,則需要傳給這個函數(shù)變量的地址。a。//第1行,不許改 int b = 11。第三大塊:函數(shù)23. 通過函數(shù)修改變量的值具體面試題示例:如下,通過修改change函數(shù)的定義和調(diào)用,讓第4行執(zhí)行完,a的值編程13,p指向b。同時考慮struct {return 0。printf(s2=%d\n,)。printf(%d\n,sizeof(v))。}v。 unsigned short s2:3。 struct 整個結(jié)構(gòu)體的總大小為最寬基本類型成員大小的整數(shù)倍。 如果位域字段之間穿插著非位域字段,則不進行壓縮; 5) 如果相鄰的位域字段的類型不同,則各編譯器的具體實現(xiàn)有差異,VC6采取不壓縮方式,DevC++采取壓縮方式; 4) 如果相鄰位域字段的類型相同,但其位寬之和大于類型的sizeof大小,則后面的字段將從新的存儲單元開始,其偏移量為其類型大小的整數(shù)倍; 3) 如果相鄰位域字段的類型相同,且其位寬之和小于類型的sizeof大小,則后面的字段將緊鄰前一個字段存儲,直到不能容納為止; 2)==0, =4 ,=4補充一點,union內(nèi)的變量順序?qū)Y(jié)果不影響(每次只可能有一種解釋是合理的,這個跟struct顯然不同)關(guān)于位域在結(jié)構(gòu)體的應(yīng)用主要要注意內(nèi)存對齊規(guī)則的理解和空域的理解使用位域的主要目的是壓縮存儲,其大致規(guī)則為:1), , ,但如果輸出結(jié)果是10進制,就會覺得難以理解。=64, 單從取位(二進制)=00, =101, =,我的機器也是32位,在存取上默認是存取32位。 return 0。 = 0x67。 char x:2。 char y:3。提出這些問題,我希望更多看到應(yīng)試者應(yīng)付問題的方法,而不是答案。如果顯然應(yīng)試者不是很好,那么這個測試就在這里結(jié)束了。在我的經(jīng)驗里,好的嵌入式程序員非常準確地明白硬件的細節(jié)和它的局限,然而PC機程序往往把硬件作為一個無法避免的煩惱。應(yīng)編寫如下:unsigned int pzero = ~0。/*139。訪問固定的內(nèi)存位置(Accessing fixed memory locations)22. 評價下面的代碼片斷:unsigned int zero = 0。我希望看到幾個要點:說明常數(shù)、|=和amp。//1001 1011 amp。}void clear_bit3(void){ a amp。最佳的解決方案如下:define BIT3 (0x13)//0000 1000static int a。3). 用 defines 和 bit masks 操作。我最近不幸看到 Infineon為其較復(fù)雜的通信芯片寫的驅(qū)動程序,它用到了bit fields因此完全對我無用,因為我的編譯器用其它的方式來實現(xiàn)bit fields的。2). 用bit fields。對這個問題有三種基本的反應(yīng)1). 不知道如何下手。給定一個整型變量a,寫兩段代碼,第一個設(shè)置a的bit 3,第二個清除a 的bit 3。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。因此20變成了一個非常大的正整數(shù),所以該表達式計算出的結(jié)果大于6。不管如何,這無符號整型問題的答案是輸出是 “6”。 (a+b 6) ?puts( 6) : puts(= 6)。 unsigned int a = 6。}20. 下面的代碼輸出的是什么?為什么?void foo(void){ a = *ptr。}由于*ptr的值可能被意想不到地該變,因此a和b可能是不同的。 b = *ptr。這段代碼的目的是用來返指針*ptr指向值的平方,但是,由于*ptr指向一個volatile型參數(shù),編譯器將產(chǎn)生類似下面的代碼:int square(volatile int *ptr){ int a,b。一個例子是當一個中服務(wù)子程序修該一個指向一個buffer的指針時。2). 是的。它是volatile因為它可能被意想不到地改變。}下面是答案:1). 是的。2). 一個指針可以是volatile 嗎?解釋為什么。假設(shè)被面試者正確地回答了這是問題(嗯,懷疑這否會是這樣),我將稍微深究一下,看一下這家伙是不是直正懂得volatile完全的重要性。嵌入式系統(tǒng)程序員經(jīng)常同硬件、中斷、RTOS等等打交道,所用這些都要求volatile變量。下面是volatile變量的幾個例子:1). 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)2). 一個中斷服務(wù)子程序中會訪問到的非自動變量(Nonautomatic variables)3). 多線程應(yīng)用中被幾個任務(wù)共享的變量回答不出這個問題的人是不會被雇傭的。19. 關(guān)鍵字volatile有什么含意 并給出三個不同的例子//register一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。3). 合理地使用關(guān)鍵字const可以使編譯器很自然地保護那些不希望被改變的參數(shù),防止其被無意的代碼修改。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。順帶提一句,也許你可能會問,即使不用關(guān)鍵字const,也還是能很容易寫出功能正確的程序,那么我為什么還要如此看重關(guān)鍵字const呢?我也如下的幾下理由:1). 關(guān)鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數(shù)為常量是為了告訴了用戶這個參數(shù)的應(yīng)用目的。最后一個意味著a是一個指向常整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是不可修改的,同時指針也是不可修改的)。第三個意味著a是一個指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。int const * a。const int *a。const int a。靜態(tài)局部變量有以下特點:該變量在全局數(shù)據(jù)區(qū)分配內(nèi)存;靜態(tài)局部變量在程序執(zhí)行到該對象的聲明處時被首次初始化,即以后的函數(shù)調(diào)用不再進行初始化;靜態(tài)局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化為0;它始終駐留在全局數(shù)據(jù)區(qū),直到程序運行結(jié)束。return 0。foo()。coutaendl。example:void foo(){static int a。靜態(tài)局部變量正好可以解決這個問題。通常的想法是定義一個全局變量來實現(xiàn)。但隨著程序退出函數(shù)體,系統(tǒng)就會收回棧內(nèi)存,局部變量也相應(yīng)失效。的確,定義全局變量就可以實現(xiàn)變量在文件中的共享,但定義靜態(tài)全局變量還有以下好處:靜態(tài)全局變量不能被其它文件所用;其它文件中可以定義相同名字的變量,不會發(fā)生沖突;(2)、靜態(tài)局部變量【一句話解決】靜態(tài)局部變量具有記憶性在局部變量前,加上關(guān)鍵字static,該變量就被定義成為一個靜態(tài)局部變量。自動變量一般會隨著函數(shù)的退出而釋放空間,靜態(tài)數(shù)據(jù)(即使是函數(shù)內(nèi)部的靜 態(tài)局部變量)也存放在全局數(shù)據(jù)區(qū)。靜態(tài)全局變量有以下特點:該變量在全局數(shù)據(jù)區(qū)分配內(nèi)存;未經(jīng)初始化的靜態(tài)全局變量會被程序自動初始化為0(自動變量的值是隨機的,除非它被顯式初始化);靜態(tài)全局變量在聲明它的整個文件都是可見的,而在文件之外是不可見的;靜態(tài)變量都在全局數(shù)據(jù)區(qū)分配內(nèi)存,包括后面將要提到的靜態(tài)局部變量。這是一個應(yīng)試者的嚴重的缺點,因為他顯然不懂得本地化數(shù)據(jù)和代碼范圍的好處和重要性。那就是,這個函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。它是一個本地的全局變量。在C語言中,關(guān)鍵字static有三個明顯的作用:1). 在函數(shù)內(nèi),一個被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。 class LinkScreen{只有一個類的類體已經(jīng)完整時,它才被視為已經(jīng)被定義。 只有對類定義了,才能聲明該類類型對象。允許指針和引用是因為它們都有固定的大小,而與它們指向的對象的大小無關(guān)。對于類的申明(還沒有定義)來說,可以有限的方式使用它。所以計算機中的堆和棧經(jīng)常時放一塊講的node 一般不是必要就不要動態(tài)創(chuàng)建,最討厭是,C++中,把new出來的東西當局部變量用,用完了馬上delete 的做法;最惡劣的是,JAVA中不斷地new,然后等著GC來回收。棧的動態(tài)分配無需釋放(是自動的),也就沒有釋放函數(shù)。靜態(tài)分配是編譯器完成的,比如自動變量(auto)的分配。不同堆分配的內(nèi)存無法互相操作。堆和棧的對比從以上知識可知,棧是系統(tǒng)提供的功能,特點是快速高效,缺點是有限制,數(shù)據(jù)不靈活;而棧是函數(shù)庫提供的功能,特點是靈活方便,數(shù)據(jù)適應(yīng)面廣泛,但是效率有一定降低。系統(tǒng)調(diào)用可能涉及用戶態(tài)和核心態(tài)的轉(zhuǎn)換。有些系統(tǒng)的系統(tǒng)調(diào)用只支持固定大小及其倍數(shù)的內(nèi)存請求(按頁分配);這樣的話對于大量的小內(nèi)存分類來說會造成浪費。當程序釋放分配的內(nèi)存空間時,這片內(nèi)存空間被返回內(nèi)部堆結(jié)構(gòu)中,可能會被適當?shù)奶幚?比如和其他空閑空間合并成更大的空閑空間),以更適合下一次內(nèi)存分配申請。基本的malloc/realloc/free函數(shù)維護了一套內(nèi)部的堆數(shù)據(jù)結(jié)構(gòu)。機器的call指令里隱含了把返回地址推入棧,然后跳轉(zhuǎn)至子程序地址的操作,而子程序中的ret指令則隱含從堆棧中彈出返回地址并跳轉(zhuǎn)之的操作。因為棧的這種特點,對棧的使用在程序中是非常頻繁的。這體現(xiàn)在,有專門的寄存器指向棧所在的地址,有專門的機器指令完成數(shù)據(jù)入棧出棧的操作。對底層機器代碼的研究可以揭示,棧是機器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),而堆則是C/C++/JAVA函數(shù)庫提供的。首先,這兩個概念都可以在講數(shù)據(jù)結(jié)構(gòu)的書中找到,他們都是基本的數(shù)據(jù)結(jié)構(gòu),雖然棧更為簡單一些。一般大家說的堆棧和棧是一樣的,就是棧(stack),而說堆時才是堆heap.棧是先入后出的,一般是由高地址向低地址生長。而用棧則不會產(chǎn)生碎片。但是用不好會產(chǎn)生內(nèi)存泄漏。棧是由編譯器自動管理的,不用你操心。棧不夠用的情況一般是程序中分配了大量數(shù)組和遞歸函數(shù)層次太深。}還有就是函數(shù)調(diào)用時會在棧上有一系列的保留現(xiàn)場及傳遞參數(shù)的操作。strcpy(p1, 123456)。p2 = (char *)malloc(20)。 123456\0在常量區(qū),p3在棧上。棧char *p2。 全局未初始化區(qū)main(){int b。比如:int a = 0。在所有函數(shù)體外定義的是全局量,加了static修飾符后不管在哪里都存放在全局區(qū)(靜態(tài)區(qū)),在所有函數(shù)體外定義的static變量表示在該文件中有效,不能extern到別的文件用,在函數(shù)體內(nèi)定義的static表示只在該函數(shù)體內(nèi)有效。 程序結(jié)束釋放(4)、另外還有一個專門放常量的地方。||
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1