上一篇有提到面試考試有C語言的測驗
這裡就稍微紀錄一下有考到然後我還記得的題目吧
有幾題是Process和Thread的問題,這些去google就有了
然後有幾題是給你一段程式寫出輸出,就是考一些指標和位元運算的觀念,在這裡稍微紀錄一下
(前面什麼標頭檔、int main()之類的就省略不寫了)
第一題:
char *a[4] = { "black", "white", "pink", "yellow"};
char *ptr = a[0];
ptr++;
printf("%s\n", ptr);
我這題一看就很直觀的寫了white... 跟個傻B一樣
其實ptr++是表示指標位址加了一位,所以就只是從black的b移到l去而已
所以答案是lack
第二題:
int x = 30; //假設x的位址是484
int *y, *z;
y = &x;
z = y;
*y++ = *z++;
x++;
printf("x = %d, y = %d, z = %d\n", x, y, z);
這題我一開始滿混亂的,後來寫了31,485,485
想當然爾當然錯啊XDDD
稍微分析一下,x=31這個沒什麼爭議
*y++ = *z++;這一行其實不知道在做什麼,因為y和z都是指向x所以兩個值是一樣的,=根本沒作用
但因為最後都++了,這行執行完之後y和z都要加一個位址
所以答案應該對啊,到底我哪裡錯勒
...因為int是4個byte,所以加一位應該是移到488才對,沒注意到這個實在是...XDDD
第三題:
unsigned a = 0xffff;
~a;
printf("%x", a);
這題答案是ffff
~a不是取補數嗎,為什麼不是0000勒
因為他沒有賦值啊,如果是a=~a的話,答案就是ffff0000了
連這都會錯我也是醉了=ˇ=
大概比較記得就是這三題吧,其他大概沒啥爭議就沒記了
基本上沒什麼特別難的,如果很熟的話大概都會對吧
然後我想表達的是... 我就是不熟的那個=ˇ=
留言列表