亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

范文資料網(wǎng)>人事資料>招聘與面試>《嵌入式面試題及答案

嵌入式面試題及答案

時(shí)間:2022-04-07 17:53:47 招聘與面試 我要投稿
  • 相關(guān)推薦

嵌入式面試題及答案

1、 如何在C中初始化一個(gè)字符數(shù)組。

嵌入式面試題及答案

這個(gè)問題看似很簡單,但是我們要將最簡單的問題用最嚴(yán)謹(jǐn)?shù)膽B(tài)度來對待。關(guān)鍵的地方:初始化、字符型、數(shù)組。最簡單的方法是char array[];。這個(gè)問題看似解決了,但是在初始化上好像還欠缺點(diǎn)什么,個(gè)人認(rèn)為:char array[5]={'1','2','3','4','5'};或者char array[5]={"12345"};或者char array[2][10]={"China","Beijing"};也許更符合“初始化”的意思。

2、 如何在C中為一個(gè)數(shù)組分配空間。

最簡單的方法是:char array[5];意思是分配給數(shù)組array一個(gè)5個(gè)字節(jié)的空間。但是我們要知道在C中數(shù)組其實(shí)就是一個(gè)名字,其實(shí)質(zhì)含義就是指針,比如char array[];是到底分配的多少空間?所以我們要將其分成為兩種不同的形式給出答案:

一種是棧的形式:char array[5];

一種是堆的形式:char *array; array=(char *)malloc(5);//C++: array=new char[5];

堆和棧的含義其實(shí)我也沒弄太透徹,改天明白了再發(fā)一篇。

我們要明白的是,第一種形式空間分配的大小可能會受操作系統(tǒng)的限制,比如windows會限制在2M;第二種形式成空間分配很靈活,想分配多少分配多少,只要RAM夠大。

3、 如何初始化一個(gè)指針數(shù)組。

首先明確一個(gè)概念,就是指向數(shù)組的指針,和存放指針的數(shù)組。

指向數(shù)組的指針:char (*array)[5];含義是一個(gè)指向存放5個(gè)字符的數(shù)組的指針。

存放指針的數(shù)組:char *array[5];含義是一個(gè)數(shù)組中存放了5個(gè)指向字符型數(shù)據(jù)的指針。

按照題意,我理解為初始化一個(gè)存放指針的數(shù)組,char *array[2]={"China","Beijing"};其含義是初始化了一個(gè)有兩個(gè)指向字符型數(shù)據(jù)的指針的數(shù)組,這兩個(gè)指針分別指向字符串"China"和"Beijing"。

4、如何定義一個(gè)有10個(gè)元素的整數(shù)型指針數(shù)組。

既然只是定義而不是初始化,那就很簡單且沒有爭議了:int *array[10];。

5、 s[10]的另外一種表達(dá)方式是什么。

前面說過了,數(shù)組和指針其實(shí)是數(shù)據(jù)存在形態(tài)的兩種表現(xiàn)形式,如果說對于數(shù)組s[],我們知道*s=s[0],那么s[10]的另一種表達(dá)方式就是:*(s+10)。

6、 GCC3.2.2版本中支持哪幾種編程語言。

這個(gè)問題實(shí)在變-態(tài),就像問你#error的作用是什么一樣。不可否認(rèn),gcc是linux下一個(gè)亮點(diǎn),是一個(gè)備受無數(shù)程序員推崇的編譯器,其優(yōu)點(diǎn)省略 1000字,有興趣可以自己查,我翻了翻書,書上曰:支持C,C++,Java,Obj-C,Ada,Fortran,Pascal,Modula-3等語言,這個(gè)“等”比較要命,不過我認(rèn)為已經(jīng)很全了,如果認(rèn)為還是不全,干脆把ASM也加上算了,不過那已經(jīng)不算是編譯了。

7、 要使用CHAR_BIT需要包含哪個(gè)頭文件。

如果結(jié)合上面的問題,答題的人估計(jì)會認(rèn)為自己撞鬼了,這個(gè)問題實(shí)在是……搜索了一下,應(yīng)該是limits.h。

8、 對(-1.2345)取整是多少?

其實(shí)不同的取整函數(shù)可能有不同的結(jié)果,不過這個(gè)數(shù)沒有太大的爭議,答案是-1。

9、 如何讓局部變量具有全局生命期。

具體的生命期的概念我覺得我還要好好深入的學(xué)習(xí)一下,但是這個(gè)題目還算比較簡單,即用static修飾就可以了,但是只是生命期延長,范圍并沒有擴(kuò)大,除非把這個(gè)變量定義在函數(shù)體外的靜態(tài)區(qū),不過那樣就變成全局變量了,仿佛不符合題目要求。

10、C中的常量字符串應(yīng)在何時(shí)定義?

這個(gè)問題說實(shí)話不是很理解題干的意思,據(jù)我理解,有兩種情況,一種是預(yù)處理階段,用#define定義;還有就是使用const修飾詞,不過const修飾的是一個(gè)變量,其含義是“只讀”,稱之為常量并不準(zhǔn)確,但是確實(shí)可以用操作變量的方法當(dāng)常量用。所以還是第一種比較靠譜。

11、如何在兩個(gè).c文件中引用對方的變量。

這個(gè)問題也問的挺含糊的,怎么說呢,最簡單最直接的方法是為變量添加extern修飾詞,當(dāng)然,這個(gè)變量必須是全局變量。還有一種就是利用函數(shù)調(diào)用來進(jìn)行變量的間接引用,比如這個(gè)C文件中的一個(gè)函數(shù)引用另外一個(gè)C中的函數(shù),將變量通過實(shí)參的形式傳遞過去。不過題目既然說是引用,那么還是用第一個(gè)答案好了。

12、使用malloc之前需要做什么準(zhǔn)備工作。

其實(shí)準(zhǔn)備工作很多啊,比如你需要一臺計(jì)算機(jī)之類的。玩笑話,我們首先要知道m(xù)alloc的用途,簡單的說就是動態(tài)的分配一段空間,返回這段空間的頭指針。實(shí)際的準(zhǔn)備工作可以這么分:需要這段空間的指針是否存在,若不存在,則定義一個(gè)指針用來被賦值,還要清楚要返回一個(gè)什么類型的指針,分配的空間是否合理;如果指針已經(jīng)存在,那么在重新將新的空間頭地址賦值給這個(gè)指針之前,要先判斷指針是否為NULL,如果不是要free一下,否則原來的空間就會被浪費(fèi),或者出錯(cuò),free之后就按照前一種情形考慮就可以了。

13、realloc函數(shù)在使用上要注意什么問題。

這個(gè)函數(shù)我也才知道的,汗一個(gè)。據(jù)我的初步理解,這個(gè)函數(shù)的作用是重新分配空間大小,返回的頭指針不變,只是改變空間大小。既然是改變,就有變大、變小和為什么改變的問題。變大,要注意不能大到內(nèi)存溢出;變小,那變小的那部分空間會被征用,原有數(shù)據(jù)不再存在;為什么改變,如果是想重新挪作他用,還是先 free了吧。

14、strtok函數(shù)在使用上要注意什么問題。

這個(gè)問題我不知道能不能回答全面,因?yàn)閷?shí)在是用的很少。這個(gè)函數(shù)的作用是分割字符串,但是要分割的字符串不能是常量,這是要注意的。比如先定義一個(gè)字符串:char array[]="part1,part2";,strtok的原形是char *strtok(char *string, char *delim);,我們將","作為分隔符,先用pt=strtok(array,",");,得到的結(jié)果print出來就是"part1",那后面的呢,要寫成pt=strtok(NULL,",");,注意,要用NULL,如果被分割的字符串會被分成N段,那從第二次開始就一直要用NULL?偨Y(jié)起來,需要注意的是:被分割的字符串和分隔符都要使用變量;除第一次使用指向字符串的指針外,之后的都要使用NULL;注意使用這個(gè)函數(shù)的時(shí)候千萬別把指針跟丟了,不然就全亂了。

15、gets函數(shù)在使用上要注意什么問題。

這是一個(gè)鍵盤輸入函數(shù),將輸入字符串的頭地址返回。說到要注意的問題,我還是先查了一下網(wǎng)上的一些情況,需要注意的就是gets以輸入回車結(jié)束,這個(gè)地球人都知道,但是很多人不知道的是,當(dāng)你輸入完一個(gè)字符串后,這個(gè)字符串可能依然存在于這個(gè)標(biāo)準(zhǔn)輸入流之中,當(dāng)再次使用gets的時(shí)候,也許會把上次輸入的東西讀出來,所以應(yīng)該在使用之后用fflush(stdin);處理一下,將輸入流清空。最后也還是要注意溢出的問題。關(guān)于這個(gè)答案我比較含糊,不知道有沒有高人高見?

16、C語言的詞法分析在長度規(guī)則方面采用的是什么策略?

我無語……聞所未聞啊……還是搜索了一下,有一篇文章,地址是:http://emrowgh.com,是關(guān)于詞法分析器的。其中提到了兩點(diǎn)策略: (1) 按最長匹配原則確定被選的詞型;(2) 如果一個(gè)字符串能為若干個(gè)詞型匹配,則排列在最前面的詞型被選中。不知道是不是題干的要求,還是其他什么。我乃一介草民,望達(dá)人指點(diǎn)迷津!

17、a+++++b所表示的是什么意思?有什么問題?

這個(gè)東西(稱之為東西一點(diǎn)都不過分)其實(shí)并沒有語法錯(cuò)誤,按照C對運(yùn)算符等級的劃分,++的優(yōu)先級大于+,那么這句話會被編譯器看做:(a++)+(++ b),這回明白了吧。有什么問題,語法上沒有問題,有的是道德上的問題!作為一個(gè)優(yōu)秀的程序員,我們要力求語句的合法性和可讀性,如果寫這句的人是在一個(gè) team里,那么他基本會被打的半死……最后討論一下結(jié)果:假設(shè)a之前的值是3,b是4,那么運(yùn)行完這個(gè)變-態(tài)語句后,a的值是4,b是5,語句的結(jié)果是 8。

18、如何定義Bool變量的TRUE和FALSE的值。

不知道這個(gè)題有什么陷阱,寫到現(xiàn)在神經(jīng)已經(jīng)大了,一般來說先要把TURE和FALSE給定義了,使用#define就可以:

#define TURE 1

#define FALSE 0

如果有一個(gè)變量需要定義成bool型的,舉個(gè)例子:bool a=TURE;就可以了。

19、C語言的const的含義是什么。在定義常量時(shí),為什么推薦使用const,而不是#define。

首先,這個(gè)題干抽了10題回答的一個(gè)大嘴巴。關(guān)于常量的概念看來我要好好看看書了……我說過了,const修飾詞可以將一個(gè)變量修飾為“只讀”,這個(gè)就能稱為常量么?姑且認(rèn)為可以;氐筋}目中,const是只讀的意思,它限定一個(gè)變量不允許被改變,誰都不能改!既然是修飾變量,那么變量的類型就可以豐富多彩,int啊,char啊,只要C認(rèn)識的都可以;但是#define就不可以了,在預(yù)處理階段缺乏類型檢測機(jī)制,有可能會出錯(cuò)。還有就是變量可以 extern,但是#define就不可以。貌似const還可以節(jié)省RAM,這個(gè)我倒是沒有考證過。至于const的用法和作用,有很多,我會總結(jié)后發(fā)上來。

20、C語言的volatile的含義是什么。使用時(shí)會對編譯器有什么暗示。

終于最后一題了,容易么……如果這個(gè)測試是一個(gè)關(guān)于嵌入式的,那么這道題非常重要。脑~面上講,volatile的意思是易變的,也就是說,在程序運(yùn)行過程中,有一些變量可能會被莫名其妙的改變,而優(yōu)化器為了節(jié)約時(shí)間,有時(shí)候不會重讀這個(gè)變量的真實(shí)值,而是去讀在寄存器的備份,這樣的話,這個(gè)變量的真實(shí)值反而被優(yōu)化器給“優(yōu)化”掉了,用時(shí)髦的詞說就是被“和-諧”了。如果使用了這個(gè)修飾詞,就是通知編譯器別犯懶,老老實(shí)實(shí)去重新讀一遍!可能我說的太“通俗”了,那么我引用一下“大師”的標(biāo)準(zhǔn)解釋:

volatile的本意是“易變的” 。

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

精確地說就是,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。

下面是volatile變量的幾個(gè)例子:

1). 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)

2). 一個(gè)中斷服務(wù)子程序中會訪問到的非自動變量(Non-automatic variables)

3). 多線程應(yīng)用中被幾個(gè)任務(wù)共享的變量

嵌入式系統(tǒng)程序員經(jīng)常同硬件、中斷、RTOS等等打交道,所用這些都要求volatile變量。不懂得volatile內(nèi)容將會帶來災(zāi)難。  

嵌入式面試題與答案2015-05-25 23:12 | #2樓

1. 用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

我在這想看到幾件事情: 

1). #define 語法的基本知識(例如:不能以分號結(jié)束,括號的使用,等等) 

2). 懂得預(yù)處理器將為你計(jì)算常數(shù)表達(dá)式的值,因此,直接寫出你是如何計(jì)算一年中有多少秒而不是計(jì)算出實(shí)際的值,是更清晰而沒有代價(jià)的。 

3). 意識到這個(gè)表達(dá)式將使一個(gè)16位機(jī)的整型數(shù)溢出-因此要用到長整型符號L,告訴編譯器這個(gè)常數(shù)是的長整型數(shù)。 

4). 如果你在你的表達(dá)式中用到UL(表示無符號長整型),那么你有了一個(gè)好的起點(diǎn)。記住,第一印象很重要。

      2. 寫一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。 #define MIN(A,B) ((A) <= (B) (A) : (B))

這個(gè)測試是為下面的目的而設(shè)的: 

1). 標(biāo)識#define在宏中應(yīng)用的基本知識。這是很重要的,因?yàn)橹钡角度?inline)操作符變?yōu)闃?biāo)準(zhǔn)C的一部分,宏是方便產(chǎn)生嵌入代碼的唯一方法,對于嵌入式系統(tǒng)來說,為了能達(dá)到要求的性能,嵌入代碼經(jīng)常是必須的方法。 

2). 三重條件操作符的知識。這個(gè)操作符存在C語言中的原因是它使得編譯器能產(chǎn)生比if-then-else更優(yōu)化的代碼,了解這個(gè)用法是很重要的。 

3). 懂得在宏中小心地把參數(shù)用括號括起來 

4). 我也用這個(gè)問題開始討論宏的副作用。

3. 預(yù)處理器標(biāo)識#error的目的是什么?

如果你不知道答案,請看參考文獻(xiàn)1。這問題對區(qū)分一個(gè)正常的伙計(jì)和一個(gè)書呆子是很有用的。只有書呆子才會讀C語言課本的附錄去找出象這種 

問題的答案。當(dāng)然如果你不是在找一個(gè)書呆子,那么應(yīng)試者最好希望自己不要知道答案。

【嵌入式面試題及答案】相關(guān)文章:

應(yīng)急面試題目及答案06-06

情景面試題題目及答案03-15

營銷招聘面試題及答案06-01

物業(yè)電工面試題附答案03-15

金融業(yè)面試題目及答案03-09

主持人面試題目及答案04-19

項(xiàng)目經(jīng)理面試題目及其答案03-17

招警考試經(jīng)典面試題及參考答案03-06

常見醫(yī)院面試題目與參考答案05-01

醫(yī)院會計(jì)面試題及答案06-05