給一個整數變數 a,寫出兩段程式碼。第一個要設定 a 的 bit 4,第二個要清除 a 的 bit 4。在以上兩個操作中,要保持其它位不變。
典型的,這個新的key word是__interrupt。以下的程式碼使用__interrupt來定義一個中斷service routine。評論這個程式碼:
這個函數有太多錯誤了,問題如下:
評論以下的程式碼片段?
0xFFFF
將會導致錯誤。unsigned int compzero = 0xFFFF;
1111 1111 1111 1111
。0x0000FFFF
(即 0000 0000 0000 0000 1111 1111 1111 1111
)。unsigned int compzero = ~0;
0
的二進位表示是 0000 0000 0000 0000 0000 0000 0000 0000
(假設 unsigned int
為 32 位元)。~0
代表對 0 取反,變成 1111 1111 1111 1111 1111 1111 1111 1111
,即 0xFFFFFFFF
。正確的程式碼如下:
這個問題真的可以知道應試者是否了解字組長度在電腦的重要性。在我的經驗中,好的嵌入式程式設計師會嚴謹的知道硬體的細節與它的限制,然後電腦程式設計師傾向忽視硬體並把它視為一個必要的煩擾。
What Is The Output Of this program?
Answer
Output: 65535 -65536
Explaination:
a
為 0x0000ffff
,因此 k
為 0xffff0000
。而 %d
代表要印出 signed int
。%u
才是印出 unsigned int
。
特性 | struct(結構體) | union(聯合體) |
---|---|---|
記憶體分配 | 每個成員都有自己的儲存空間,總大小為所有成員大小的總和(加上對齊填充) | 所有成員共用相同的記憶體空間,大小等於最大成員的大小 |
成員存取 | 可以同時存取多個成員 | 只能存取一個成員,寫入一個成員會覆蓋其他成員 |
用途 | 用來組織不同類型的相關資料 | 用來節省記憶體,適合不同情況下存不同的值 |
struct 在 C 上是一種資料型態裡面可以包含多種資料型態,並且會按照程式中定義時擺放的順序在記憶體中排序,按照宣告的順序擺放。編譯器會自動為 struct 的成員分配空間。
在 C++ 上 struct 可以包含方法,和 class 幾乎相同,只是繼承與存取權限預設皆為 public (相反地 class 權限預設為 private)。另外,class 比 struct 更常用於泛型程式設計。例如:
泛型程式設計(Generic Programming) 是一種程式設計範式,它允許你編寫可以適用於不同資料型別的程式碼,而不需要針對每種型別重複撰寫相同的程式碼。
在 C++ 中,泛型程式設計最常透過 Template
來實作。
假設你要寫一個函式來交換兩個變數的值:
這函式只能交換 int
型別,如果要交換 double
或 char
,就必須額外寫:
這樣的程式碼會變得重複且難以維護。
泛型程式設計 讓我們可以寫一個通用的函式,適用於所有型別:
這樣我們就可以用同一個 swap_generic
函式交換不同型別:
union 是一種特殊的資料型態,所有內容都從記憶體開頭開始存取的資料型態,並且他的大小由內部最大的那個資料型態來定義。會用同一個存儲空間,只能存儲最後一個成員訊息。只給其中一個成員給值而使用其他值就會壞掉。
範例
執行結果
可以看到 union 的成員共用記憶體,因此寫入 b 之後,a 的值就變了。
C 語言提供自定型態為 enum,是一組由識別字所代表的整數常數(不可變更其值)。除非特別指定,不然都是由 0 開始,接下來遞增 1。例如:
來源:C 語言考古題
給你一個指向一組 Linked List 的指標叫做 head,請你將這組Linked List 進行反轉,並且回傳反轉後的 Linked List。
空間複雜度為 O(1)
,時間複雜度為 O(n)
。
caller 和 callee 各自有自己的記憶體。
這種參數傳遞方式是最簡單的方式,就是把每個參數都複製一份到函式裡運算。
這種方式在某些情形變得不適用,例如要修改傳遞進來的參數,或者不想複製一份參數浪費效能。這時就會採用傳址 call by pointer 或傳參考 call by reference。
又稱 Call by address,但為了跟後面的方式作區分,用 Call by pointer 這名子比較明確,這邊以最簡單的swap作為範例。
caller 和 callee使用相同的記憶體,C++ 才有。
好處在於之後在函式裡的變數寫法如同一般的變數寫法。
沒看清楚題目要問甚麼?但可能是要考這個
來源:一些我夢到的常見面試問題
他是用來解決同步問題的一種 Data Type,會有兩個 Atomic operation,分別是 Acquire() 及 Release(),裡面的實作方法是利用一個共享的 boolean 變數控制。
來源:面試準備
記憶體流失的意思。主要是記憶體管理失當,像是 C/C++ 如果使用malloc()
取的記憶體空間,就必須在不須使用後利用 free()
適當,如果沒有釋放,則會產生 memory leakage。
來源:面試準備