嵌入式軟體開發經典面試題

2021-07-25 07:08:31 字數 3999 閱讀 6442

在嵌入式軟體開發的面試中,遇到筆試的機率非常大。一般來說,筆試的題目不會太難,但牽涉的知識面比較廣。

若你年底有找工作的計畫,有必要找一些筆試題看看,這樣能讓你從題目中掌握並學到很多知識。

1.用

#define

宣告乙個常數,表明

1年中有多少秒(忽略閏年問題)?

答案:#define seconds_per_year (60 * 60 * 24 * 365)ul

要點

a.沒有以分號結束;

b.懂得預處理器將為你計算常數表示式的值。即60 * 60 * 24 * 365而不是

31536000.

c.考慮到了16位機將會溢位,巧妙運用了ul。

2.寫乙個「標準」巨集

min,這個巨集輸入兩個引數並返回較小的乙個?

答案:#define min(a,b) ((a) <= (b) ? (a) : (b))

要點

a.引數用括號括起來;

b.考察能否合理運用條件運算子;

3.heap與

stack

的差別?

答案:heap是堆,

stack

是棧。stack的空間由系統自動分配

/釋放,

heap

上的空間手動分配

/釋放。

stack空間有限,

heap

是很大的自由儲存區,

malloc

函式分配的記憶體空間即在堆上。

網上經典例子

int a = 0; //全域性初始化區

char *p1;//全域性未初始化區

void main(void)

int b; //

char s = "abc"; //

char *p2; //

char *p3 = "123456"; //123456\0在常量區,

p3在棧上

static int c =0; //全域性(靜態)初始化區

p1 = (char *)malloc(10); //

p2 = (char *)malloc(20); //

4.用變數

a給出下面的定義

a.乙個整型數?

答案:int a;

b.乙個指向整型數的指標?

答案:int *a;

c.乙個指向指標的的指標,它指向的指標是指向乙個整型數?

答案:int **a;

d.乙個有10個整型數的陣列?

答案:int a[10];

e.乙個有10個指標的陣列,該指標是指向乙個整型數的?

答案:int *a[10];

f.乙個指向有10個整型數陣列的指標

?答案:int (*a)[10];

g.乙個指向函式的指標,該函式有乙個整型引數並返回乙個整型數?

答案:int (*a)(int);

h.乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整型引數並返回乙個整型數

?答案:int (*a[10])(int);

5.關鍵字

static

的作用是什麼?

a.在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變;

b.在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的局變數;

c.在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用;

6.關鍵字

const

有什麼含意?

答案:const意味著"唯讀

"。如果回答"const意味著常數

",面試官會覺得你只是乙個業餘的人。

7.下面的宣告都是什麼意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

答案:a.前兩個的作用是一樣,a是乙個常整型數

;b.第三個意味著a是乙個指向常整型數的指標(也就是,整型數是不可修改的,但指標可以)

;c.第四個意思a是乙個指向整型 數的常指標(也就是說,指標指向的整型數是可以修改的,但指標是不可修改的)

;d.最後乙個意味著a是乙個指向常整型數的常指標(也就是說,指標指向的整型數 是不可修改的,同時指標也是不可修改的)。

8.關鍵字

volatile

有什麼含意

?答案:乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。

9.sizeof和

strlen

的區別?

答案:sizeof是運算子,在編譯時即計算好了; 而

strlen

是函式,要在執行時才能計算。

10.在某工程中,要求設定一絕對位址為

0x67a9

的整型變數的值為

0xaa66

。編譯器是乙個純粹的

ansi

編譯器。寫**去完成這一任務

?答案:int *p;

p = (int*)0x67a9;

*p = 0xaa66;

11.給定乙個整型變數

a,寫兩段**,第乙個設定a的

bit 3

,第二個清除a 的

bit 3

。在以上兩個操作中,要保持其它位不變?

答案:#define bit3 (0x1 << 3)

static int a;

void set_bit3(void)

a |= bit3;

void clear_bit3(void)

a &= ~bit3;

12.下面函式錯誤嗎?

int square(volatile int *ptr)

return *ptr * *ptr;

答案:錯誤;

正確寫法:

long square(volatile int *ptr)

int a;

a = *ptr;

return a * a;

我的部落格:

嵌入式軟體經典面試題

用預處理命令 define宣告乙個常數,用以表明一年中有多少秒 忽略閏年問題 define year 60 60 24 365 ul考點 1 define語法的基礎知識 2 懂得預處理器將為你計算常數表示式的值,因此,直接寫出你是何年機斷一年中有多少秒而不是計算出實際的值,是更清晰沒有代價的。3 意...

嵌入式經典面試題

這些題實在太經典了 預處理器 preprocessor 1 用預處理指令 define 宣告乙個常數,用以表明1年中有多少秒 忽略閏年問題 define seconds per year 60 60 24 365 ul 我在這想看到幾件事情 1 define 語法的基本知識 例如 不能以分號結束,括...

嵌入式軟體面試題一

1 請寫出你所知道的c 語言關鍵字。auto 宣告自動變數 switch 用於開關語句 case 開關語句分支 break 跳出當前迴圈 default 開關語句中的 其它 分支 goto 無條件跳轉語句 do 迴圈語句的迴圈體 while 迴圈語句的迴圈條件 if 條件語句 else 條件語句否定...