嵌入式面試題

2021-06-18 06:37:27 字數 1868 閱讀 4210

1.

main();

int *ptr = (int*)(&a+1);

printf("%d %d" , *(a+1), *(ptr-1) );

這段程式的輸出是:

(a) 2 2

(b) 2 1

(c) 2 5

(d) 以上均不是

2.考查自加操作(++)

main()

這段程式的輸出是:

(a) i=4 j=2

(b) i=3 j=2

(c) i=3 j=4

(d) i=3 j=6

3.此題考查的是c的變長引數

#include

int ripple ( int , ...);

main()

int ripple (int n, ...)

這段程式的輸出是:

(a) 7

(b) 6

(c) 5

(d) 3

1.(c)

a的型別是乙個整型陣列,它有5個成員

&a是指向陣列的指標

ptr指標,即&a+1實際指向a[6]。ptr-1之後,指向a[5]。

2.(b)

sizeof 操作符給出其運算元需要占用的空間大小,它是在編譯時就可確定的,所以其運算元即使是乙個表示式,也不需要在執行時進行計算.( ++i + ++ i )是不會執行的,所以

i 的值還是3

3. (c)

在c編譯器通常提供了一系列處理可變引數的巨集,以遮蔽不同的硬體平台造成的差異,增加程式的可移植性。這些巨集包括va_start、 va_arg和va_end等。

採用ansi標準形式時,引數個數可變的函式的原型宣告是:

type funcname(type para1, type para2, ...)

這種形式至少需要乙個普通的形式引數,後面的省略號不表示省略,而是函式原型的一部分。type是函式返回值和形式引數的型別。

不同的編譯器,對這個可變長引數的實現不一樣 ,gcc4.x中是內建函式.

關於可變長引數,可參閱

程式分析

va_list p;                 /*定義乙個變數 ,儲存 函式引數列表 的指標*/

va_start( p , n);     /*用va_start巨集 初始化 變數p, va_start巨集的第2個引數n , 是乙個固定的引數, 必須是我們自己定義的變長函式的最後乙個入棧的引數,也就是呼叫的時候引數列表                                裡的第1個引數*/

for (; ji = va_arg( p , int);      /*va_arg取出當前的引數,  並認為取出的引數是乙個整數(int) */    

for (; i;    i &=i-1 )      /*判斷取出的i是否為0*/     

++k;                              /* 如果i不為0,   k自加, i與i-1進行與邏輯運算, 直到i 為0,為了獲得i用二進位制表示時,其中二進位制1的總個數*/

當我們呼叫ripple函式時,傳遞給ripple函式的 引數列表的第乙個引數n的值是3 .

va_start 初始化 p,指向第乙個未命名的引數(n是有名字的引數) ,也就是 is 5 (第乙個).

每次對 va_arg的呼叫,都將返回乙個引數,並且把 p 指向下乙個引數.

va_arg 用乙個型別名來決定返回的引數是何種型別,以及在 var_arg的內部實現中決定移動多大的距離才到達下乙個 引數

(; i; i&=i-1) k++        /* 計算i有多少bit被置1 */

5用二進位制表示是 (101) 2

7用二進位制表示 (111) 3

所以 k 返回 5(2+3),也即本題應該選c

嵌入式面試題

15 typedef 在c語言中頻繁用以宣告乙個已經存在的資料型別的同義字。也可以用預處理器做類似的事。例如,思考一下下面的例子 define dps struct s typedef struct s tps 以上兩種情況的意圖都是要定義dps 和 tps 作為乙個指向結構s指標。哪種方法更好呢?...

嵌入式面試題

以下是我找嵌入式面試時遇到的一些問題,答案以後慢慢補充。1.incline和巨集定義的區別 3.linux自旋鎖 4.程序,執行緒的概念 5.strcpy的使用,具體實現 6.雙向鍊錶的插入,刪除 7.大端小端概念 8.寫一段c程式檢測cpu是32位還是64位 9.malloc和new的使用 10....

嵌入式面試題

如果是同步io,當乙個io操作執行時,應用程式必須等待,直到此io執行完,相反,非同步io操作在後台執行,io操作和應用程式可以同時執行,提高系統效能,提高io流量 在同步檔案io中,執行緒啟動乙個io操作然後就立即進入等待狀態,直到io操作完成後才醒來繼續執行,而非同步檔案io中,執行緒傳送乙個i...