作者caxz ( )
看板C_and_CPP
標題[問題] 面試遇到的問題
時間Fri Jul 31 23:27:55 2015
前幾天去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++
為何會有這種改變呢?
→ mike0227: if內是 f(2);cout<<2;f(2); 07/31 23:51
※ 編輯: caxz (36.227.107.101), 08/01/2015 00:09:23
※ 編輯: caxz (36.227.107.101), 08/01/2015 00:25:31
推 stupid0319: 幹嘛寫出這樣的程式碼來SM自己呢.......... 08/01 00:23
推 name2name2: 推 08/01 08:16
推 kidbower: volatile我記得是不做最佳化,呼叫時用int可能被最佳化 08/02 22:35
推 Killercat: volatile那個例子是,比方說*a是一個被外部process 08/03 07:15
→ Killercat: 去做塗寫的位置,那要是沒volatile的話compiler會錯誤 08/03 07:15
→ Killercat: 的把a最佳化 不會拿兩次 08/03 07:16
→ Killercat: 不過這例子真的舉得不好,因為(*a)*(*a)間隔太短了 08/03 07:16
→ Killercat: 短到兩次取(*a)取到不同值幾乎不可能 08/03 07:17