[問題] 面試遇到的問題

看板C_and_CPP作者 ( )時間8年前 (2015/07/31 23:27), 8年前編輯推噓4(405)
留言9則, 5人參與, 最新討論串2/4 (看更多)
前幾天去M面試遇到的幾個問題,請各位高手解解惑 ==================================================== 問題一 void f(int a) { if(a-- >0) { f(a); // (1) cout<< a; // (2) f(a); // (3) } } int main() { int a=3; f(a); } 我事後用devC++跑了一下結果是 0102010 但我無法看懂f()內的邏輯... 例如 : 是執行完第一行之後(也就是執行 f(2)->f(1)->f(0)->end ) 之後才會執行第二行? ==================================================== 問題二 下列program可能有什麼錯誤? 我事後自己在devC++上跑都能動, 實在不解多宣告 volatile 有什麼影響? int SQR(volatile int *a) { return (*a)*(*a); } int main() { int a = 5; int *p = &a; SQR(p); } ===================================================== 問題三 int main() { float a = 0.7; if(a > 0.7) cout<< "C" <<endl; else cout<< "C++" <<endl; //以上這段印出C++ if(a < 0.7) cout<< "C" <<endl; else cout<< "C++" <<endl; //以上這段印出C } 這看似簡單但我卻想不通....有什麼到原因是這樣的output ?? 後來又被問到 如果 a 的行型態被改為 double 呢? 我剛剛是try了一下 結果都是C++ 為何會有這種改變呢?

07/31 23:51, , 1F
if內是 f(2);cout<<2;f(2);
07/31 23:51, 1F
※ 編輯: caxz (36.227.107.101), 08/01/2015 00:09:23 ※ 編輯: caxz (36.227.107.101), 08/01/2015 00:25:31

08/01 00:23, , 2F
幹嘛寫出這樣的程式碼來SM自己呢..........
08/01 00:23, 2F

08/01 08:16, , 3F
08/01 08:16, 3F

08/02 22:35, , 4F
volatile我記得是不做最佳化,呼叫時用int可能被最佳化
08/02 22:35, 4F

08/03 07:15, , 5F
volatile那個例子是,比方說*a是一個被外部process
08/03 07:15, 5F

08/03 07:15, , 6F
去做塗寫的位置,那要是沒volatile的話compiler會錯誤
08/03 07:15, 6F

08/03 07:16, , 7F
的把a最佳化 不會拿兩次
08/03 07:16, 7F

08/03 07:16, , 8F
不過這例子真的舉得不好,因為(*a)*(*a)間隔太短了
08/03 07:16, 8F

08/03 07:17, , 9F
短到兩次取(*a)取到不同值幾乎不可能
08/03 07:17, 9F
文章代碼(AID): #1LkvF-V_ (C_and_CPP)
文章代碼(AID): #1LkvF-V_ (C_and_CPP)