巨集定義是預處理指令,在預處理階段,預處理期進行處理,只是簡單的替換為定義內容;
預處理會自動計算常量表示式,例如 #define m 10*12
#define不能以分號結尾,還要把引數小心的用括號括起來
下面有一寫例子:
試題1用乙個巨集定義find求乙個結構體struc裡某乙個變數相對struc的偏移量,例如:
1 struct student
2
則:
find(student, a); // 等於0
find(student, b); // 等於4
解答:
#define find(struc, e) (size_t)&(((struc*)0)->e)
構造方法非常巧妙,(struc*)0 把常量0強制轉換為struc型別的指標,所以結構體struc的位址從位置0開始;然後取變數e的位址&(((struc*)0)->e,就是變數e相對位址0的位移,然後強制轉換為size_t型別,一般size_t為無符號型資料,一般為unsigned int。
試題2用預處理指令#define宣告乙個常數,用以表示1年中有多少秒,忽略潤年問題:
解答:
#define a_year_seconds (365*24*60*60)ul
這裡(365*24*60*60)會在預處理階段自動計算出結果,需要注意的是後面使用ul表示無符號長整型,為了防止在16位機器上越界的問題 程式設計師面試寶典一
1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...
程式設計師面試寶典
據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...
Java程式設計師面試寶典筆記
第六章1.變數必須先初始化後才能使用。2.byte short 和char 型別的運算操作首先會把這些值轉換為int 型別,然後對int 型別進行運算,最後得到int 型別的結果。3.靜態方法裡只能呼叫靜態方法 包括main 方法 4.main 方法必須加public 修飾,如果不加則預設為prot...