加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

嵌入式C語言面試題2

12/04 14:05
653
閱讀需 13 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1.若已定義x為int類型變量,下列語句中說明指針變量p的正確語句是( )

A?int p = &x;

B?int *p = x;

C?int *p = &x;

D?*p = *x;

解析:

這是一道關(guān)于C語言中指針定義和初始化的選擇題。在C語言中,指針是用來存儲變量地址的變量。為了正確地定義和初始化一個指針變量,我們需要明確指針?biāo)赶虻淖兞康念愋?,并使用正確的語法。

現(xiàn)在我們來逐一分析每個選項:

A.?int p = &x;

這個語句試圖將整型變量x的地址賦給一個整型變量p,這是不正確的。因為p應(yīng)該是一個指針類型,而不是整型。

B.?int *p = x;

這個語句定義了一個指向整型的指針p,但是錯誤地將x的值賦給了p。p應(yīng)該存儲x的地址,而不是x的值。

C.?int *p = &x;

這個語句是正確的。它定義了一個指向整型的指針p,并將整型變量x的地址賦給了p。這是指針定義和初始化的正確方式。

D.?*p = *x;

這個語句在語法上是錯誤的。*x試圖對整型變量x進(jìn)行解引用,但x不是一個指針,因此不能解引用。此外,該語句也沒有定義指針p。

綜上所述,正確答案是C:int *p = &x;。這個語句正確地定義了一個指向整型的指針p,并將其初始化為指向整型變量x的地址。

 

2.如果有定義語句 int *ptr[4],typeid(ptr).name() 結(jié)果為 "A4_Pi",

請問對 int *(ptr[4]) , typeid(ptr).name() 輸出是

A?PPi

B?A4_Pi

C?PA4_i

D?A4_i

解析:

這是一道涉及C++中typeid操作符和類型名稱的問題。typeid操作符在C++中用于獲取一個對象的類型信息,并且.name()成員函數(shù)可以返回一個表示該類型的C風(fēng)格字符串。然而,需要注意的是,不同的編譯器和不同的實現(xiàn)可能會返回不同的字符串格式來表示類型。

首先,我們分析給定的定義語句int *ptr[4]

int *?表示一個指向整數(shù)的指針。

ptr[4]?表示這是一個包含4個元素的數(shù)組。

綜合起來,int *ptr[4]?表示一個包含4個指向整數(shù)的指針的數(shù)組。

對于typeid(ptr).name()返回"A4_Pi",我們可以推斷出這是某種編譯器特定的類型表示方式,其中可能包含了數(shù)組的大?。?)、指針(P)和整數(shù)(i)的信息。但是,具體的表示格式是編譯器依賴的,并不是C++標(biāo)準(zhǔn)的一部分。

接下來,我們考慮int *(ptr[4])

這實際上是對ptr[4]的錯誤引用,因為ptr[4]是超出數(shù)組ptr范圍的(數(shù)組索引是從0到3)。

如果我們的意圖是詢問關(guān)于ptr數(shù)組本身的類型,而不是它某個具體元素或超出范圍的部分,那么我們應(yīng)該只考慮ptr的類型,即int *ptr[4]。

對于整個數(shù)組ptr的類型,typeid(ptr).name()應(yīng)該返回與前面相同的類型表示,因為數(shù)組的類型沒有改變。

根據(jù)題目給出的信息,typeid(ptr).name()返回"A4_Pi",并且沒有提供關(guān)于如何解釋這個字符串的具體規(guī)則。因此,我們不能直接從這個字符串推斷出typeid對于其他類似類型會返回什么。但是,基于題目中的信息和常識,我們可以合理假設(shè),對于相同的類型(在這里是int *ptr[4]),typeid應(yīng)該會返回相同的字符串。

現(xiàn)在,我們來看選項:

A. PPi - 這似乎表示一個指向指針的指針,與int *ptr[4]不符。
B. A4_Pi - 這與題目中給出的typeid(ptr).name()的返回值相同,符合我們的預(yù)期。
C. PA4_i - 這個表示不清晰,不符合int *ptr[4]的類型。
D. A4_i - 這似乎缺少了表示指針的部分。

由于題目中的表述可能存在一些混淆,并且我們基于題目給出的信息來推斷,最合理的答案是選擇與題目中typeid(ptr).name()原本返回值相同的選項,即:

B. A4_Pi

 

3.以下C語言和C++語言比較中錯誤的是()

A?C語言絕大部分語法適用于C++

B?C語言和C++的struct意義和用法一致

C?C語言不能使用繼承技術(shù),但C++可以

D?C++是面向?qū)ο蟮恼Z言,C語言是面向過程的語言

解析:

這是一道關(guān)于C語言和C++語言區(qū)別的選擇題。我們需要仔細(xì)分析每個選項,以確定哪個陳述是錯誤的。

A. C語言絕大部分語法適用于C++

這個陳述是正確的。C++是在C語言的基礎(chǔ)上發(fā)展起來的,它包含了C語言的大部分語法,并進(jìn)行了擴(kuò)展和增強(qiáng)。因此,C語言的大部分語法在C++中都是適用的。

B. C語言和C++的struct意義和用法一致

這個陳述是不完全正確的。在C語言中,struct主要用于定義數(shù)據(jù)結(jié)構(gòu),它僅僅是一種數(shù)據(jù)聚合的方式。而在C++中,struct不僅可以用來定義數(shù)據(jù)結(jié)構(gòu),還可以像類(class)一樣擁有成員函數(shù)、構(gòu)造函數(shù)、析構(gòu)函數(shù)、繼承等面向?qū)ο蟮奶匦浴1M管C++中的struct默認(rèn)成員的訪問權(quán)限是public,而class默認(rèn)是private,但除此之外,它們在C++中的用法非常相似。因此,這個選項的陳述忽略了C++中struct的擴(kuò)展用法,可以認(rèn)為是錯誤的。

C. C語言不能使用繼承技術(shù),但C++可以

這個陳述是正確的。C語言是一種面向過程的語言,不支持面向?qū)ο蟮奶匦?,如繼承、多態(tài)等。而C++是一種面向?qū)ο蟮恼Z言,它支持繼承、多態(tài)等面向?qū)ο蟮奶匦浴?/p>

D. C++是面向?qū)ο蟮恼Z言,C語言是面向過程的語言

這個陳述也是正確的。C++確實是一種面向?qū)ο蟮恼Z言,它支持類、對象、繼承、多態(tài)等面向?qū)ο蟮奶匦?。而C語言則是一種面向過程的語言,它主要關(guān)注函數(shù)的調(diào)用和數(shù)據(jù)的處理過程。

綜上所述,選項B中的陳述“C語言和C++的struct意義和用法一致”是不準(zhǔn)確的,因為C++中的struct具有更多的面向?qū)ο蟮奶匦?。所以,錯誤的選項是B。

 

4.以下函數(shù)中,和其他函數(shù)不屬于一類的是____。

A?strcpy

B?strncpy

C?snprintf

D?strcat

E?strtok

F?strncat

解析:

首先,我們來分析每個選項提供的函數(shù):

A.?strcpy?- 用于復(fù)制字符串,將源字符串復(fù)制到目標(biāo)字符串中,直到遇到源字符串的結(jié)束符''。

B.?strncpy?- 是strcpy的安全版本,它允許指定要復(fù)制的最大字符數(shù),以防止目標(biāo)緩沖區(qū)溢出。

C.?snprintf?- 用于將格式化的數(shù)據(jù)寫入字符串,它允許指定寫入的最大字符數(shù),也是為了防止緩沖區(qū)溢出。

D.?strcat?- 用于連接兩個字符串,將源字符串追加到目標(biāo)字符串的末尾。

E.?strtok?- 用于分割字符串,根據(jù)指定的分隔符將字符串分割成多個子字符串。

F.?strncat?- 是strcat的安全版本,它允許指定要追加的最大字符數(shù),以防止目標(biāo)緩沖區(qū)溢出。

接下來,我們根據(jù)函數(shù)的用途和功能進(jìn)行分類:

字符串復(fù)制相關(guān):strcpy、strncpy

字符串連接相關(guān):strcat、strncat

字符串格式化輸出:snprintf

字符串分割:strtok

從上面的分類可以看出,strcpy、strncpystrcat、strncat都是用于字符串的復(fù)制或連接操作,而snprintf是用于字符串的格式化輸出,strtok是用于字符串的分割。顯然,strtoksnprintf與其他函數(shù)在功能上不屬于同一類。

但是,題目要求選出一個不屬于一類的函數(shù)。在這里,我們需要進(jìn)一步區(qū)分:

snprintf雖然與字符串處理有關(guān),但它主要是用于格式化輸出,而不是字符串的復(fù)制或連接。

strtok則是用于字符串的分割,與復(fù)制和連接操作完全不同。

snprintfstrtok之間,snprintf仍然屬于字符串的“構(gòu)建”或“輸出”類別,而strtok則完全是一個不同的操作——分割。因此,與其他函數(shù)在功能上最不屬于一類的函數(shù)是strtok。

 

5.有以下程序

int main() {    int m=0256,n=256;     printf("%o %on",m,n);    return 0;}

程序運(yùn)行后的輸出結(jié)果是()

A?0256 0400

B?0256 256

C?256 400

D?400 400

解析:

這里,m被定義為一個八進(jìn)制數(shù)(以0開頭),而n被定義為一個十進(jìn)制數(shù)。

對于m

八進(jìn)制數(shù)0256實際上是不合法的,因為八進(jìn)制數(shù)的每一位只能是0-7。但是,C語言編譯器可能會忽略前導(dǎo)的0,將0256解釋為十進(jìn)制數(shù)256(這取決于編譯器的具體實現(xiàn),但通常是這樣的)。

因此,m很可能被當(dāng)作十進(jìn)制數(shù)256來處理。

對于n

n被明確定義為十進(jìn)制數(shù)256。

接下來,看printf函數(shù)的調(diào)用:

這里,%o是格式說明符,用于以八進(jìn)制形式輸出整數(shù)。

對于mn,它們都以八進(jìn)制形式輸出。

十進(jìn)制數(shù)256轉(zhuǎn)換為八進(jìn)制是400。

因此,無論m是否因為前導(dǎo)0而被當(dāng)作八進(jìn)制數(shù)處理(實際上編譯器可能會忽略這個前導(dǎo)0),最終mn的值都是256,并且都以八進(jìn)制形式400輸出。

所以,程序的輸出結(jié)果是:答案是D。

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

相關(guān)推薦

電子產(chǎn)業(yè)圖譜