嵌入式筆試刷題(第35天)
1. 簡述C語言中static關(guān)鍵字的作用。
? 答案:
static
在函數(shù)內(nèi):變量只初始化一次,生命周期貫穿整個(gè)程序運(yùn)行期間(局部靜態(tài)變量)。static
在文件內(nèi):限制變量或函數(shù)的作用域只在當(dāng)前文件內(nèi)(內(nèi)部鏈接性)。static
在全局變量前:防止其它文件訪問這個(gè)變量。
? 講解:
- 局部static變量,函數(shù)調(diào)用多次也不會(huì)重新初始化。適合記憶狀態(tài)。
- 文件內(nèi)static函數(shù),只能被當(dāng)前文件調(diào)用,外部不可見。
- 好處:隱藏實(shí)現(xiàn)細(xì)節(jié),防止命名沖突。
2. 簡述什么是大端存儲(chǔ)和小端存儲(chǔ)。
? 答案:
- 大端存儲(chǔ)(Big Endian):高位字節(jié)存儲(chǔ)在低地址,低位字節(jié)存儲(chǔ)在高地址。
- 小端存儲(chǔ)(Little Endian):低位字節(jié)存儲(chǔ)在低地址,高位字節(jié)存儲(chǔ)在高地址。
? 講解:
舉個(gè)例子,int a = 0x12345678
在內(nèi)存中的存放:
0x00 |
0x12 |
0x78 |
0x01 |
0x34 |
0x56 |
0x02 |
0x56 |
0x34 |
0x03 |
0x78 |
0x12 |
大端適合人類閱讀,小端適合硬件快速運(yùn)算。
3. 訪問特定內(nèi)存位置0x1458C并賦值0xAA836,純ASNI C寫法。
? 答案:
*(volatile int*)(0x1458C) = 0xAA836;
? 講解:
volatile
告訴編譯器不要優(yōu)化掉對該地址的訪問。- 直接把地址強(qiáng)制轉(zhuǎn)換成指向
int
類型的指針,然后賦值。 - 嵌入式常見用法,比如寄存器讀寫。
4. 寫出字符串strcpy的函數(shù)實(shí)現(xiàn)過程。
? 答案:
char* my_strcpy(char* dest, const char* src) { char* ret = dest; while ((*dest++ = *src++) != '\0'); return ret; }
? 講解:
- 把
src
指向的字符串一個(gè)字節(jié)一個(gè)字節(jié)復(fù)制到dest
。 - 復(fù)制包括結(jié)尾的
\0
。 - 返回的
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
嵌入式筆試專欄 文章被收錄于專欄
本專欄系統(tǒng)整理了嵌入式方向筆試中常見的知識(shí)點(diǎn)和高頻考題,涵蓋基礎(chǔ)理論、常用算法、C語言陷阱、操作系統(tǒng)原理、驅(qū)動(dòng)開發(fā)、常見外設(shè)通信協(xié)議(如 I2C/SPI/UART)、RTOS、Linux 內(nèi)核、以及實(shí)用電路知識(shí)等內(nèi)容。