在嵌入式軟體開發的面試中,遇到筆試的機率非常大。一般來說,筆試的題目不會太難,但牽涉的知識面比較廣。
若你年底有找工作的計畫,有必要找一些筆試題看看,這樣能讓你從題目中掌握並學到很多知識。
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 條件語句否定...