C語言面試考題

安安大家好

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突然鬼遮眼 很捶心肝

發佈留言