安安大家好
9/1面試了某CPU、GPU大公司
考了5題C語言
在韌體產業裡面應該算是基礎
可以給大家參考一下
第一題很簡單
考的是++i與i++
會印出1
int main()
{
int i = 1;
printf("%d", i++);
return 0;
}
第二題也很簡單
這題考的是exclusive or和printf的pattern
但是當下太緊張
看printf的pattern的時候突然鬼遮眼
事後回想覺得很無奈…
這題會印出 0x00AA跟0x55
int main()
{
int i = 0x55, j = 0xAA;
i ^= j;
j ^= i;
i ^= j;
printf("0x%04x, 0x%x", i , j);
return 0;
}
第三題很簡單
考的是goto
會印出 1 2
int main()
{
int i = 1;
while (i>0) {
Champion:
if (i == 3) {
break;
}
if (i <= 5) {
printf("%d ", i++);
}
}
}
第四題考的是union佔用的空間
那些變數初始化的值我忘記了,
不過大概就是考sizeof(union)會是多少
然後運算子的優先序
第五題考的是 1. 定義變數的大小, 2. 結構, 3. 指標
這邊我不知道:4的意思是把佔用空間指定為4個bits大小
所以在印第二行的時候 沒有想到8會變-8
最後一行在指標的強制型別轉換時,也沒想清楚
最後會印出
5 5
-8 -8
5
struct Var { int x:4; int y; };int main() { struct Var var[] = {{5, 8}, {8, 5}, {5, 8}, {8, 5}, {5, 8}, {8, 5}}; struct Var* p = var; printf("%d %d\n", p->x, (*p).x); p++; printf("%d %d\n", p->x, (*p).x); printf("%d", ((struct Var*)((char*)p+4))->x); return 0; }
總結
最後一題真的是我沒準備到
其他都不難
第二題那個printf的pattern突然鬼遮眼 很捶心肝