<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 分享7道最近常問(wèn)的嵌入式面試題

分享7道最近常問(wèn)的嵌入式面試題

作者: 時(shí)間:2024-04-09 來(lái)源: 收藏

1. 關(guān)鍵字static的作用是什么?為什么static變量只初始化一次?

本文引用地址:http://dyxdggzs.com/article/202404/457326.htm


· 修飾局部變量:使得變量變成靜態(tài)變量,存儲在靜態(tài)區,存儲在靜態(tài)區的數據周期和程序相同,在main函數開(kāi)始前初始化,在退出程序時(shí)銷(xiāo)毀(無(wú)論是局部靜態(tài)還是全局靜態(tài))。

· 修飾全局變量:全局變量本身就是存儲在靜態(tài)區,因此static并不能改變其存儲位置。但是,static限制了其鏈接屬性,被static修飾的全局變量只能被該包含該定義的文件訪(fǎng)問(wèn)(即改變了作用域)

· 修飾函數:是的該函數只能在包含該函數定義的的文件中被調用,對于靜態(tài)函數,申明和定義需要放到同一個(gè)文件夾中。

· 修飾成員變量:使用static修飾類(lèi)的數據成員使其成為類(lèi)的全局變量,會(huì )被類(lèi)的所有對象共享,包括派生類(lèi)的對象,所有的對象都只維持同一個(gè)實(shí)例。因此,static成員必須在類(lèi)外進(jìn)行初始化(初始化格式:int base::var=10;),而不能在構造函數內進(jìn)行初始化,不過(guò)也可以使用const修飾的static數據成員在類(lèi)內初始化。

· 修飾成員函數:使用static修飾成員函數,使這個(gè)類(lèi)只存在這一份函數,所有對象共享該函數,不含this指針,因而只能訪(fǎng)問(wèn)類(lèi)的static成員變量。

靜態(tài)成員是可以獨立訪(fǎng)問(wèn)的,也就是說(shuō),無(wú)需創(chuàng )建任何對象實(shí)例就可以訪(fǎng)問(wèn)。例如可以分裝某些算法,比如數學(xué)函數,如sin、cos等,這些函數本就沒(méi)必要屬于某一個(gè)對象,所以從類(lèi)上調用更好。

注意:不可以用const static修飾成員函數。

對于所有的對象(不僅僅是靜態(tài)對象),初始化都只有一次,而由于靜態(tài)變量具有“記憶”功能,初始化后,一直都沒(méi)有被銷(xiāo)毀,都會(huì )保存在內存區域中,所以不會(huì )再次初始化。

存放在靜態(tài)區的變量的生命周期一般比較長(cháng),一般與整個(gè)源程序“同生死、共存亡”,所以它只需初始化一次。


2. 關(guān)鍵字voliate作用和含義/使用場(chǎng)景?


volatile是一個(gè)類(lèi)型修飾符(type specifier)。它是被設計用來(lái)修飾被不同線(xiàn)程訪(fǎng)問(wèn)和修改的變量。如果沒(méi)有volatile,基本上會(huì )導致這樣的結果:要么無(wú)法編寫(xiě)多線(xiàn)程程序,要么編譯器失去大量?jì)?yōu)化的機會(huì )。

如果沒(méi)有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲,可能暫時(shí)使用寄存器中的值,如果這個(gè)變量由別的程序更新了的話(huà),將出現不一致的現象。

一般用處:

· 并行設備的硬件寄存器(如狀態(tài)寄存器):存儲器映射的硬件寄存器通常也要加 voliate,因為每次對它的讀寫(xiě)都可能有不同意義。

· 中斷服務(wù)程序中修改的供其它程序檢測的變量,需要加volatile:當變量在觸發(fā)某中斷程序中修改,而編譯器判斷主函數里面沒(méi)有修改該變量,因此可能只執行一次從內存到某寄存器的讀操作,而后每次只會(huì )從該寄存器中讀取變量副本,使得中斷程序的操作被短路。

· 多任務(wù)環(huán)境下各任務(wù)間共享的標志,應該加volatile:在本次線(xiàn)程內, 當讀取一個(gè)變量時(shí),編譯器優(yōu)化時(shí)有時(shí)會(huì )先把變量讀取到一個(gè)寄存器中;以后,再取變量值時(shí),就直接從寄存器中取值;當內存變量或寄存器變量在因別的線(xiàn)程等而改變了值,該寄存器的值不會(huì )相應改變,從而造成應用程序讀取的值和實(shí)際的變量值不一致 。

· 一個(gè)參數既可以是const還可以是volatile嗎?可以的,例如只讀的狀態(tài)寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。

· volatile的本意是“易變的”由于訪(fǎng)問(wèn)寄存器的速度要快過(guò)RAM,所以編譯器一般都會(huì )作減少存取外部RAM的優(yōu)化,但有可能會(huì )讀臟數據。當要求使用volatile聲明的變量的值的時(shí)候,系統總是重新從它所在的內存讀取數據,即使它前面的指令剛剛從該處讀取過(guò)數據。而且讀取的數據立刻被保存。


3. sizeof和strlen的區別,使用場(chǎng)景?


sizeof() 和 strlen() 的主要區別在于:

· sizeof() 是一個(gè)運算符,而 strlen() 是一個(gè)函數。

· sizeof() 計算的是變量或類(lèi)型所占用的內存字節數,而 strlen() 計算的是字符串中字符的個(gè)數。

· sizeof() 可以用于任何類(lèi)型的數據,而 strlen() 只能用于以空字符 '国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放

<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>