來幫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 = 382. 請寫出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....)
沒有留言:
張貼留言