1、讀程式,回答問題
int main(int argc,char *argv)
a)、寫出程式的結果;
b)、在乙個可移植的系統中這種表示式是否存在風險?why?
答:a)、4
b)、存在風險,因為c=c++%5;在這個表示式中,對c有兩次修改,行末未定義,c的值不明確。
2、#include "stdio.h"
int a=0; //data section
int b; //data section
static char c; //bss
int main(int arg c,char *argv)
a) 寫出程式輸出
b) 編譯器如果安排各個變數(a,b,c,d)在記憶體中的布局(eg. stack,heap,data section,bss section),最好用圖形方式描述。
答: a=2 b=100 c=2 d=6 e=5
3 c/c++基礎知識問題
a) 關鍵字volatile在編譯時有什麼含義?並給出三個不同使用場景的例子(可以偽**或者文字描述)。
b) c語言中static關鍵字的具體作用有哪些 ?
c) 請問下面三種變數宣告有何區別?請給出具體含義
int const *p;
int* const p;
int const* const p;
答:a)、用volatile關鍵字定義變數,相當於告訴編譯器,這個變數的值會隨時發生變化,每次使用的時候都需要去記憶體裡面
重新讀取他的值,並不要隨意去針對他做優化。
建議使用volatile關鍵字的地方:
1、並行裝置的硬體暫存器
2、乙個中斷服務子程式中會訪問到的非自動變數
3、多執行緒應用中被幾個任務共享的非自動變數
b) 在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。
在模組內(但在函式體外),乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。
在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。那就是,這個函式被限制在宣告它的模組的本地範圍內使用。
static全域性變數與普通的全域性變數有什麼區別:static全域性變數只初使化一次,防止在其他檔案單元中被引用;
static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;
static函式與普通函式有什麼區別:static函式在記憶體中只有乙份,普通函式在每個被呼叫中維持乙份拷貝
c) 乙個指向常整型數的指標
乙個指向整型數的常指標
乙個指向常整型數的常指標
4 嵌入式系統相關問題
a) 對於整形變數a=0x12345678,請畫出在little endian及big endian的方式下在記憶體中是如何儲存的。
b) 在arm系統中,函式呼叫的時候,引數是通過哪種方式傳遞的?
c) 中斷(interrupt,如鍵盤中斷)與異常(exception,如除零異常)有何區別?
a)c) 異常:在產生時必須考慮與處理器的時鐘同步,實踐上,異常也稱為同步中斷。在處理器執行到由於程式設計失誤而導致的錯誤指令時,或者在執行期間出現特殊情況(如缺頁),必須靠核心處理的時候,處理器就會產生乙個異常。
所謂中斷應該是指外部硬體產生的乙個電訊號,從cpu的中斷引腳進入,打斷cpu當前的執行;
所謂異常,是指軟體執行中發生了一些必須作出處理的事件,cpu自動產生乙個陷入來打斷當前執行,轉入異常處理流程。
嵌入式C語言面試題(二)
1 讀程式段,回答問題 int main int argc,char argv 複製 a 寫出程式輸出 b 在乙個可移植的系統中這種表示式是否存在風險?why?include stdio.h int a 0 int b static char c int main int argc,char arg...
嵌入式C語言面試題(二)
1 讀程式段,回答問題 int main int argc,char argv a 寫出程式輸出 b 在乙個可移植的系統中這種表示式是否存在風險?why?include stdio.h int a 0 int b static char c int main int argc,char argv a...
嵌入式面試題
15 typedef 在c語言中頻繁用以宣告乙個已經存在的資料型別的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子 define dps struct s typedef struct s tps 以上兩種情況的意圖都是要定義dps 和 tps 作為乙個指向結構s指標。哪種方法更好呢?...