• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

嵌入式開發(fā)工程師面試題1

2024/11/25
1738
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1.若有以下定義語句double a[8],*p=a;int i=5;對數(shù)組元素錯誤的引用是?

A?*a

B?a[5]

C?*(p+1)

D?p[8]

在 C 或 C++ 語言中,對于數(shù)組和指針的操作需要嚴格遵守語法規(guī)則。

我們逐一分析選項來確定哪個是對數(shù)組元素錯誤的引用:A.?*a

這是正確的。a?是數(shù)組名,它在大多數(shù)表達式中等價于指向數(shù)組第一個元素的指針。因此,*a?等價于?a[0],表示數(shù)組的第一個元素。

B.?a[5]

這也是正確的。a[5]?直接引用數(shù)組的第六個元素(數(shù)組索引從 0 開始)。

C.?*(p+1)

這同樣是正確的。p?是一個指向?double?類型的指針,指向數(shù)組?a?的第一個元素。p+1?將指針移動到數(shù)組的第二個元素,*(p+1)?解引用這個指針,得到數(shù)組的第二個元素,即?a[1]。

D.?p[8]

這是錯誤的。在 C/C++ 中,p[i]?是指針?p?偏移?i?個元素后的值的簡寫,等價于?*(p+i)。因此,p[8]?等價于?*(p+8),這意味著嘗試訪問?p?指向的位置之后的第九個?double?元素。由于?p?指向的是一個只有 8 個元素的數(shù)組,p[8]?嘗試訪問數(shù)組之外的內(nèi)存,這是越界的,因此是錯誤的。

綜上所述,錯誤的引用是?D. p[8]。

2.在上下文及頭文件均正常的情況下,設(shè):

enum color { red, yellow = 2, blue, white, black }r = white;

,執(zhí)行 printf("%d", r) ;后的輸出結(jié)果是?

在C語言中,enum類型用于定義一組命名的整數(shù)常量。當定義enum時,可以給枚舉成員顯式賦值,也可以不賦值。如果未顯式賦值,則枚舉成員的值將默認為前一個成員的值加1(第一個未賦值的成員默認為0)。

考慮以下enum定義:c

復(fù)制代碼

enum color { red, yellow = 2, blue, white, black } r = white;

 

這里,enum color定義了五個成員:

red:未顯式賦值,且是第一個成員,因此默認為0。

yellow:顯式賦值為2。

blue:未顯式賦值,因此繼承

yellow的值加1,即3。

white:未顯式賦值,因此繼承

blue的值加1,即4。

black:未顯式賦值,因此繼承

white的值加1,即5。

同時,定義了一個enum color類型的變量r,并將其初始化為white。由于white的值是4,因此執(zhí)行printf("%d", r);后,輸出結(jié)果是4。總結(jié):執(zhí)行printf("%d", r);后的輸出結(jié)果是4。

3.對于條件表達式(k)?(i++):(i--)來說,其中的表達式k等價于()

A?k==0B?k==1C?k!=0D?k!=1

在C語言中,條件表達式(也稱為三元運算符)的語法是:

復(fù)制代碼

condition ? expression1 : expression2;

這里,condition?是一個任意表達式,它會被評估為真(非零)或假(零)。如果?condition?為真(即非零),則整個條件表達式的結(jié)果是?expression1?的值;如果?condition?為假(即零),則結(jié)果是?expression2?的值?,F(xiàn)在考慮給定的條件表達式:

代碼

(k) ? (i++) : (i--);

在這個表達式中,k?是條件部分。根據(jù)條件表達式的規(guī)則,k?會被評估:如果 k 的值非零(即真),則執(zhí)行 i++。如果 k?的值為零(即假),則執(zhí)行 i--。

這里的關(guān)鍵是理解?k?如何被評估。在C語言中,任何非零值都被視為真,而零被視為假。因此,當?k?被用作條件時,它實際上是在檢查?k?是否不等于零。

現(xiàn)在來看選項:A.?k==0:這是檢查?k?是否等于零,與條件表達式的邏輯不符。B.?k==1:這是檢查?k?是否等于1,這同樣不是條件表達式所檢查的。C.?k!=0:這是檢查?k?是否不等于零,這與條件表達式中?k?的評估方式相符。D.?k!=1:這是檢查?k?是否不等于1,這也不是條件表達式所檢查的。

因此,對于條件表達式?(k) ? (i++) : (i--)?來說,其中的表達式?k?等價于?k!=0。正確答案是 C。

4.設(shè)有以下函數(shù)void fun(int n,char *s)(......),則下面對函數(shù)指針的定義和賦值均是正確的:()

A?void (*pf)(int,char); pf=&fun;B?void (*pf)(int n,char *s); pf=fun;C?void *pf(); *pf=fun;D?void *pf(); pf=fun;

在C語言中,定義一個指向函數(shù)的指針需要指定函數(shù)的返回類型、函數(shù)名(在指針定義中省略)以及函數(shù)的參數(shù)類型。對于給定的函數(shù):

復(fù)制代碼

void fun(int n, char *s);

我們需要定義一個函數(shù)指針,該指針能夠指向這樣一個函數(shù):返回類型為void,接受一個int類型的參數(shù)和一個char *類型的參數(shù)?,F(xiàn)在,我們逐一分析選項:A.?void (*pf)(int,char); pf=&fun;

這個選項中的函數(shù)指針定義是錯誤的。它應(yīng)該指定第二個參數(shù)為char *類型,而不是char類型。此外,雖然取函數(shù)地址是常見的做法,但在這個上下文中,直接賦值pf = fun;也是合法的,因為函數(shù)名在大多數(shù)表達式中會被解釋為指向該函數(shù)的指針。

B.?void (*pf)(int n,char *s); pf=fun;

這個選項是正確的。函數(shù)指針pf被正確地定義為指向一個接受int和char *參數(shù)并返回void的函數(shù)。然后,pf被賦值為fun,這是合法的,因為fun是一個符合該簽名的函數(shù)。

C.?void *pf(); *pf=fun;

D.?void *pf(); pf=fun;

這個選項同樣是錯誤的。與選項C類似,pf的定義與fun的簽名不匹配。此外,嘗試將函數(shù)名fun直接賦值給pf也是不正確的,因為類型不匹配。

綜上所述,只有選項B正確地定義了函數(shù)指針,并將其賦值為指向給定函數(shù)的指針。正確答案是B:

5.閱讀下面代碼:

class B{public:   virtual void Fun(){}};class D: public B{public:   void Fun(){}};D dd;B* pb = ⅆD* pd = ⅆpb->Fun();pd->Fun();

上述例程調(diào)用的Fun函數(shù)順序為()A?B::Fun, D::FunB?B::Fun, B::FunC?D::Fun, D::FunD?D::Fun, B::Fun

在C++中,虛函數(shù)(virtual function)機制允許派生類(derived class)重寫(override)基類(base class)中的函數(shù)。當通過基類指針或引用調(diào)用虛函數(shù)時,實際調(diào)用的函數(shù)是派生類中重寫的那個版本,而不是基類中的版本。

這種動態(tài)綁定(dynamic binding)或稱為運行時多態(tài)性(runtime polymorphism)是面向?qū)ο缶幊讨械囊粋€核心概念。現(xiàn)在,我們來分析提供的代碼:c復(fù)制代

class B 定義了一個虛函數(shù)?Fun()。class D 繼承自?B 并重寫了?Fun() 函數(shù)。創(chuàng)建了一個?D 類型的對象?dd。

B* pb = ⅆ

創(chuàng)建了一個指向 dd 的 B 類型的指針 pb。由于 B 中的 Fun() 是虛函數(shù),通過 pb 調(diào)用 Fun() 時,將發(fā)生動態(tài)綁定,實際調(diào)用的是 D?類中的 Fun().

D* pd = ⅆ 創(chuàng)建了一個指向?dd?的 D 類型的指針 pd。通過 pd 調(diào)用 Fun() 時,直接調(diào)用的是 D?類中的 Fun(),因為這里沒有涉及多態(tài)性(即沒有通過基類指針調(diào)用派生類函數(shù))。

現(xiàn)在,我們來看函數(shù)調(diào)用的順序:

pb->Fun();:由于?pb 是 B 類型的指針,但指向 D 類型的對象,且 Fun() 是虛函數(shù),因此這里調(diào)用的是 D::Fun()。

pd->Fun();:pd 是 D 類型的指針,直接指向 D?類型的對象,因此這里調(diào)用的也是 D::Fun().

綜上所述,調(diào)用的?Fun?函數(shù)順序為?D::Fun, D::Fun。正確答案是 C。

未完待續(xù),持續(xù)更新!以防后邊找不到可以點贊收藏下!

相關(guān)推薦