來幫BLOG灌個水一下,把這幾道題目講解一下:
1. 請寫出以下主程式的輸出結果為何??
#include <stdio.h> int main(void) { unsigned char a = 38, b = 49; a ^= b; b ^= a; a ^= b; printf("a = %d, b = %d \n", a, b); return 0; }Answer: 這個應該很簡單吧!! 在測驗位元互斥 (OR, '^')的運算。結果為a = 49, b = 38
2. 請寫出a陣列的內容為何??
#include <stdio.h> void foo(int [][3]); int main(void) { int a[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; foo(a); return 0; } void foo(int b[][3]) { ++b; b[1][1] = 100; return; }Answer: 這一道題目測驗的是陣列和記憶體的觀念。陣列名稱就是代表記憶體開始的位址;foo()函式裡的++b是指陣列b的記憶體位址,再加一個單位;而這所謂的一個單位,是指二維陣列裡的第一維單位的大小,所以會是sizeof(int) * 3的大小。所以在foo()裡的b[0][0] = 4。最後,a陣列的內容為:
a[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 100, 9}
};
3. 寫一行C程式碼將變數X (32-bit)的bit 29~31的值清除為0 (bit 0~28保持不變)。
Answer: X &= ~7
(To be continue....)
沒有留言:
張貼留言