現在嵌入式發展這么快,嵌入全的去公嵌入很多人都開始走上嵌入式學習之路。式題司面試都式題據市場統計,庫最庫一些畢業或者正在找工作的現上人在面試企業的時候會卡在這里,那就是嵌入全的去公嵌入面試題。很多人在面試中都表現得很好,式題司面試都式題但是庫最庫在回答面試問題時卻沒有付出足夠的努力,最終被面試問題拒絕了,現上這使得找工作成為了一個難題,嵌入全的去公嵌入讓他們無路可走。式題司面試都式題天賦。庫最庫而且,現上對于某些人來說也是嵌入全的去公嵌入如此。綜上所述,式題司面試都式題你可以通過嵌入式訪談向一些空難受害者學習。庫最庫公司面試一般都是可以的。
(1)char * constp char const *p const char *p 以上三者有什么區別?
回答:
字符*常量p; //常量指針,p的值不能修改
字符常量* p; //指向常量的指針,所指向的常量值不能改變const char *p; //和char const *p
char * const p 是一個char 指針。指針是一個常量,不能修改。也就是說,像p=q 這樣的陳述是錯誤的;
char const * p 和const char * p 是同一類型的char 指針。指針指向的字符被視為常量,不允許修改。也就是說,像*p=q 這樣的語句是錯誤的。
(2)char str1[]='abc'; charstr2[]='abc'; const char str3[]='abc'; const charstr4[]='abc'; const char *str5='abc'; const char *str6='abc'; char *str7='abc'; char *str8='abc';cout (str1==str2) endl; cout ( str3==str4 ) endl; cout ( str5==str6 ) endl; cout ( str7==str8 ) endl;
結果是: 0 0 1 1 str1,str2,str3,str4是數組變量,它們有自己的內存空間;而str5、str6、str7、str8是指針,它們指向同一個常量區。
關于嵌入式物聯網,確實有很多東西需要學習。不要學錯路線和內容,導致你的薪資水漲船高!
我免費給大家分享一個數據包,差不多150G。學習內容、面試、項目都比較新、全面!據估計,在網上購買某種魚至少要花費幾十美元。
點此找助手0元獲?。簰叽a進群獲取資料
(3)什么是預編譯以及什么時候需要預編譯:
回答:
1. 始終使用不經常更改的大型代碼體。
2. 程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,所有包含文件都可以預編譯成預編譯頭。
預編譯指令表示編譯器在程序正式編譯之前執行的操作,可以放置在程序中的任何位置。
(4)下面代碼中的兩個sizeof用法有問題嗎?
[Cyi] void UpperCase( char str[] ) //將str 中的小寫字母轉換為大寫字母{ for( size_t i=0; i
(5) 嵌入式系統中經常使用無限循環。 C語言中如何編寫無限循環?
這個問題有多種解決方案。我的首選解決方案是:
同時(1)
{
}
一些程序員更喜歡以下解決方案:
為了(;)
{
}
這個實現讓我很困惑,因為語法并不能準確表達正在發生的事情。如果候選人給出
作為解決方案,我將以此為契機來探索他們是如何做到這一點的
基本的。如果他們的基本答案是:“我被教導要這樣做,但從未想過為什么?!?/p>
給我留下不好的印象。
第三種選擇是使用goto
循環:
.
轉到循環;
如果候選人給出了上述解決方案,則意味著他要么是一名匯編語言程序員(這可能是一件好事),要么他
我是一名BASIC/FORTRAN 程序員,想要進入一個新領域。
常量
(6)關鍵字const是什么意思?
當我聽到受訪者說“const 意味著恒定”時,我就知道我正在與一個業余愛好者打交道。
去年Dan Saks在他的文章中已經完整總結了const的所有用法,所以ESP(譯者:Embedded)
每個系統編程的讀者都應該非常熟悉const 能做什么和不能做什么。如果你來自
如果不閱讀那篇文章,只要能夠知道const 意味著“只讀”就可以了。雖然這個答案并不完整
答案,但我接受它作為正確答案。 (如果想知道更詳細的答案,請仔細閱讀Saks
文章。 )如果候選人能夠正確回答這個問題,我會問他一個附加問題:以下所有陳述
什么意思
常量整型;
int 常量a;
常量int *a;
int * 常量a;
int const * 一個常量;
前兩者作用相同,a是常整數。第三個表示a 是一個指向常量整數的指針(也
也就是說,整數不能修改,但指針可以)。第四個含義a 是指向整數的常量指針(也可以
也就是說,指針指向的整數可以修改,但指針不能修改)。最后一位表示a是1
指向常整數的常指針(即指針所指向的整數不能被修改,指針也不能被修改。
可修改)。如果候選人能夠正確回答這些問題,那么他或她就給我留下了良好的印象。順便一提
總而言之,你可能會問,即使不使用const關鍵字,仍然很容易寫出功能正確的程序,那么
為什么我還是這么看重const這個關鍵字呢?我有以下幾個原因:
1)。關鍵字const的作用是向閱讀你代碼的人傳達非常有用的信息。其實它聲明了一個參數
它是一個常量,告訴用戶該參數的應用目的。如果您曾經花費大量時間清理別人的垃圾
垃圾,你很快就會學會欣賞這些額外的信息。 (當然,懂得使用const的程序員很少會留下垃圾
讓其他人清理垃圾。 )
2)。使用const 關鍵字可以通過為優化器提供一些附加信息來生成更緊湊的代碼。
3)。合理使用關鍵字const可以讓編譯器自然地保護那些不想改變的參數,防止它們被改變。
被無意的代碼修改。簡而言之,這減少了錯誤的發生。
易揮發的
(7) 關鍵字volatile 的含義是什么并給出三個不同的例子。
定義為volatile 的變量意味著該變量可能會被意外改變,這樣編譯器就不會
假設該變量的值。準確地說,優化器每次使用該變量時都必須仔細地重新讀取。
獲取該變量的值,而不是使用存儲在寄存器中的備份。以下是易失性變量的一些示例:
1)。并行設備的硬件寄存器(如狀態寄存器)
2)。將在中斷服務程序中訪問的非自動變量(非自動變量)
3)。多線程應用程序中多個任務共享的變量
不能回答這個問題的人將不會被錄用。我認為這是C 程序員與嵌入式系統程序員最大的區別
基本問題。嵌入式系統程序員經常與硬件、中斷、RTOS等打交道,所有這些都需要vo
緯度變量。不了解易失性內容可能會導致災難。
假設受訪者正確回答了這個問題(好吧,懷疑情況確實如此),我將深入挖掘一下,看看
讓我們看看這個人是否完全理解volatility 的重要性。
1)。參數可以同時是const 和volatile 嗎?解釋為什么。
2)。指針可以是易失性的嗎?解釋為什么。
3)。以下函數有什么問題:
int square(易失性int *ptr)
{
返回*ptr * *ptr;
}
答案如下:
1)。是的。只讀狀態寄存器就是一個例子。它是不穩定的,因為它可能會發生意外的改變。
它是const,因為程序不應該嘗試修改它。
2)。是的。雖然這種情況并不常見。一個例子是當服務例程修改指向緩沖區的指針時
指針。
3)。這段代碼中有一個技巧。這段代碼的目的是返回指針*ptr所指向的值的平方。然而,通過
由于*ptr指向一個易失性參數,編譯器將生成類似以下的代碼:
int square(易失性int *ptr)
{
整數a,b;
a=*ptr;
b=*ptr;
返回a*b;
}
由于*ptr 的值可能會意外更改,因此a 和b 可能會不同。因此,此代碼可能不會返回
是您期望的平方值!正確的代碼如下:
長方形(易失性int *ptr)
{
整數a;
a=*ptr;
返回a*a;
}
位操作
(8)嵌入式系統總是要求用戶對變量或寄存器進行位操作。給定一個整型變量a,寫兩段代碼
,第一個設置a 的位3,第二個清除a 的位3。上述兩個操作中,其他位保持不變。
對于這個問題有三個基本的回答
1)。不知道如何開始。受訪者從未做過任何嵌入式系統工作。
2)。使用位域。位域是被扔進C語言死胡同的東西。它確保您的代碼可以在不同的編譯器中運行。
它們之間不可移植,并且還確保您的代碼不可重用。我最近很不幸地見到了英飛凌
為其更復雜的通信芯片編寫的驅動程序使用位字段,因此對我來說完全沒用,因為我的程序員
翻譯器以其他方式實現位字段。道德上:永遠不要讓一個非嵌入式人員留下來
國際硬件優勢。
3)。使用#defines 和位掩碼進行操作。這是一種非常便攜的方法,應該使用
方法。最佳解決方案如下:
#定義BIT3 (0x1 3)
靜態整型;
無效set_bit3(無效)
{
一個|=位3;
}
無效清除_bit3(無效)
{
a=~BIT3;
}
有些人喜歡定義一個用于設置和清除值的掩碼并定義一些描述性常量,這也是可以接受的。
我想看的幾個要點: 常量、|=和=~ 操作的解釋。
數據聲明
(9) 利用變量a給出如下定義
a) 一個整數
b) 指向整數的指針
c) 指向指針的指針,它指向的指針是一個整數(Apointertoapointer
為整數)
d) 10 個整數的數組
e) 一個由10 個整數指針組成的數組
整數)
f) 指向10 個整數的數組的指針
g) 指向一個函數的指針,該函數接受一個整數參數并返回一個整數(Apointertoafu
以整數作為參數并返回整數的函數)
h) 一個由10 個指針組成的數組,指向一個采用整數參數并返回整數的函數
一個由十個指針組成的數組,指向采用整數參數和r 的函數
返回一個整數)
答案是:
a)整數a; //一個整數
b)整數*a; //指向整數的指針
c) int **a; //指向整數的指針
d) int a[10]; //10 個整數的數組
e) int *a[10]; //10 個整數指針的數組
f) int (*a)[10]; //指向10 個整數的數組的指針
g) int (*a)(int); //指向帶有整數參數的函數a 的指針
并返回一個整數
h) int (*a[10])(int); //一個由10 個指向采用int 的函數的指針組成的數組
eger 參數并返回一個整數
人們經常聲稱這里的一些問題需要翻一本書才能回答,我同意。當我
在寫這篇文章時,我確實檢查了書以確保語法正確。
但當我接受采訪時,我希望被問到這個問題(或類似的問題)。因為在接受采訪時
有一段時間,我確信我知道這個問題的答案。如果候選人不知道
所有的答案(或者至少是大部分的答案),那么就沒有為這次面試做準備。如果面試官沒有
準備這次采訪,那么他可以準備什么呢?
靜止的
(10)關鍵字static的作用是什么
這個簡單的問題很少得到完整的回答。在C語言中,關鍵字static有三個明顯的作用:
1)。在函數體中,聲明為static 的變量在調用函數時保持其值。
2)。在模塊內部(但在函數體外部),聲明為static 的變量可以被模塊中使用的函數訪問,
但不能被模塊外的其他函數訪問。它是一個局部全局變量。
3)。在模塊內,聲明為靜態的函數只能由該模塊中的其他函數調用。也就是說,這個
函數僅限于聲明它的模塊的本地范圍。
大多數考生能正確回答第一部分,有些人能正確回答第二部分,很少有人能理解第二部分。
三個部分。對于顯然不了解本地化數據和代碼范圍的好處的候選人來說,這是一個嚴重的缺點
和重要性。
(11) 對于32位機器,該機器的指針是多少位?回答:
只需查看地址總線中的位數即可確定指針有多少位。 80386以后的機器都使用32條數據總線。所以指針的位數是4個字節。
(12) 主函數()
{
inta[5]={ 1,2,3,4,5};
int *ptr=(int*)(a+1);
printf('%d,%d',*(a+1),*(ptr-1));
}
答案:2. 5 *(a+1)是a[1],*(ptr-1)是a[4],執行結果是2,5 a+1不是首地址+1,系統會認為添加一個a 數組的偏移量就是數組大小的偏移量(本例中為5 個int) int *ptr=(int *)(a+1);那么ptr其實就是(a[5]),也就是a+5 原因如下:a是一個數組指針,它的類型是int(*)[5];而給指針加1則需要根據指針類型加上一定的值。不同類型的指針加1后大小增加的方式不同。 a的長度為5個int數組指針,所以需要加上5*sizeof(int),所以ptr實際上是a[5],但是prt和(a+1)不是同一類型(這一點很重要) ,所以prt-1只會減去sizeof (int*) a,a的地址是相同的,但含義不同。 a是數組首地址,即a[0]的地址,a是對象(數組)的首地址,a+1是數組的下一個元素。的地址,即a[1],a+1是下一個對象的地址,即a[5]。
(13)下面的代碼有什么問題:
int main() { 字符;字符*str=a; strcpy(str,'你好'); printf(str);返回0; }
答:沒有為str分配內存空間,會出現異常。問題在于將字符串復制到字符變量指針指向的地址中。雖然可以正確輸出結果,但由于固有讀寫越界,導致程序崩潰。
(14)char* s='AAA'; printf('%s',s); s[0]='B'; printf('%s',s);怎么了?
答案:“AAA”是一個字符串常量。 s是一個指針,指向這個字符串常量,所以聲明s的時候有問題。成本char*s='AAA';并且由于它是一個常量,所以對s[0]的賦值操作是非法的。
文章內容僅供閱讀,不構成投資建議,請謹慎對待。投資者據此操作,風險自擔。
俄克拉荷馬大學研究生留學申請條件嚴苛,要求申請者具備優秀的學術背景和語言能力。以下是詳細的申請條件及院校和專業介紹。俄克拉荷馬大學研究生語言要求俄克拉荷馬大學研究生申請的語言要求嚴格,申請者需要滿足以
奧塔哥大學研究生留學申請條件嚴格而全面,旨在選拔優秀的國際學生加入其卓越的學術殿堂。作為新西蘭最古老的大學,奧塔哥大學以其高水平的學術研究和良好的就業前景吸引著世界各地的學子。奧塔哥大學研究生申請語言
邦德大學作為澳大利亞首屈一指的私立學府,其研究生留學申請條件備受關注。本文將詳細介紹邦德大學研究生留學的各項要求,幫助有意申請的學子全面了解。邦德大學研究生申請語言要求邦德大學對研究生申請者的語言成績
布朗大學研究生留學申請全面解析布朗大學研究生申請語言要求布朗大學對于研究生申請的語言成績有一定的要求。雖然具體的要求可能會因專業而異,但一般來說,申請布朗大學研究生項目需要提交托?;蜓潘汲煽儭M懈3煽?