嵌入式筆試刷題(第36天)
11. const 有什么用途?(請至少說明兩種)
? 答案:
- 修飾變量:變量只讀,防止修改。
- 修飾函數(shù)參數(shù):保護傳入?yún)?shù),防止在函數(shù)內(nèi)意外更改。
- 修飾返回值:保證返回值不被修改。
- 修飾成員函數(shù):表示成員函數(shù)不會修改對象內(nèi)容。
? 講解:
常見用法示例:
const int a = 10; // 變量只讀 void func(const int* p); // 指針指向的數(shù)據(jù)不能改 class A { public: int getValue() const; // 成員函數(shù)不會修改成員變量 };
12. 在C++程序中調(diào)用被C編譯器編譯后的函數(shù),為什么要加 extern "C" 聲明?
? 答案:
- 因為 C++ 支持函數(shù)名重載,C語言不支持。
extern "C"
禁止C++編譯器對函數(shù)名進行改名(Name Mangling)。- 保證C++程序能正確鏈接C編譯的函數(shù)。
? 講解:
C++編譯器會把函數(shù)名帶上參數(shù)信息做"花名"處理,比如 int foo(int)
編譯成 _Z3fooi
。
加了 extern "C"
,編譯器就按C的規(guī)則保留原名:
extern "C" void foo();
這樣C++能直接找到C語言的符號,完成鏈接。
13. 給定int a,寫兩行代碼,設(shè)置第三位和清除第三位,保持其他位不變。
? 答案:
a |= (1 << 3); // 設(shè)置第3位為1 a &= ~(1 << 3); // 清除第3位為0
? 講解:
(1 << 3)
:把1左移3位,得到掩碼0x08
。|=
:位或,設(shè)置某位為1。&= ~
:位與取反,清除某位為0。
第三位指的是從0開始數(shù)的第3位(也就是數(shù)值8
的位置)。
14. 不調(diào)用庫函數(shù)的情況下實現(xiàn)一個 strcpy 函數(shù)。
? 答案:
char* my_strcpy(char* dest, const char* src) { char* ret = dest; while ((*dest++ = *src++)); // 包括拷貝\0 return ret; }
? 講解:
跟之前第4題一樣,這里再強調(diào):
while ((*dest++ = *src++));
把賦值和判斷合成一行,非常高效。- 拷貝結(jié)束標(biāo)志是拷貝了字符串結(jié)束符
\0
。
15. What will be printed as the result of the operation below, why?
void foo(void) { unsigned int a = 6; int b = -20; (a+b > 6) ? puts("> 6") : puts("< 6"); }
? 答案:
> 6
? 講解:
a=6
是unsigned int
,b=-20
是int
。a+b
中,b
被隱式轉(zhuǎn)換成unsigned,因為unsigned + sign
,規(guī)則是提升到。
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
嵌入式筆試專欄 文章被收錄于專欄
本專欄系統(tǒng)整理了嵌入式方向筆試中常見的知識點和高頻考題,涵蓋基礎(chǔ)理論、常用算法、C語言陷阱、操作系統(tǒng)原理、驅(qū)動開發(fā)、常見外設(shè)通信協(xié)議(如 I2C/SPI/UART)、RTOS、Linux 內(nèi)核、以及實用電路知識等內(nèi)容。