8/27/2008

差點被考到的程式碼

昨天面試 其中一個主管很在意coding能力
我也跟他說我coding很好
他就要考考我
考了兩題後 他發現太無趣了 就從一堆題目中找了一題出來
說這題過去沒幾個人講的出來
#define fun(A, b) (int)(&(((A *)0)->b))

typedef struct {
  char str[40];
  int type;
  int maxLen;
} intf;
問題是fun(intf, maxLen)的值為多少

看到第一眼時 先假裝鎮定 但不解 A * 的作用
因為腦殘沒看到typedef 想說A替換後只是變數不是型別
所以就靠推理的方式理解成強制轉型為pointer 並以此位置為0
所以b的位置就是 sizeof(char) * 40 + sizeof(int)
答案是對的 還告訴我它叫offset 差點被他唬到

回家查了一下
原來這個code是在stddef.h裡
目的是做出泛型計算變數在struct的offset

沒有留言: