經典面試題陷阱之無限迴圈

2021-08-19 06:20:59 字數 916 閱讀 6674

在vs環境下,請看下面的**輸出的結果是什麼?

#includeint main()

; for (i = 0; i <= 12; i++)

return 0;

}

大家一看到這道題肯定會以為越界訪問了,程式會掛掉。但是這道題裡確實是有一點陷阱的,我們執行起來,這個程式輸出的結果盡然是無限迴圈的hehe。下面讓我們一起來**一下:

★首先,我們來看乙個現象:

#includeint main()

然後,我們除錯起來,看一下他們的記憶體:

我們可以觀察到棧區的區域性變數在記憶體中是先定義的在高位址,後定義的在低位址。然後我們回來這道題裡,i的位址肯定比陣列arr的位址高,然後陣列又是在記憶體中從低位址到高位址連續連續存放的,看下面的圖就很容易理解了。

我們對上邊的那道題進行除錯,看一下:

除錯到這裡我們是不是發現了什麼?沒錯,arr[12]的位址和i的位址竟然是一樣的,也就是說arr[12]就是i,那麼我們把arr[12]賦值為0的時候,是不是以為這把i改變成0呢!沒錯,就是這樣的。當然,事實上這道題是碰巧這樣的,因為arr[9]低位址和i的高位址真好差了兩個,但是在linux系統下和vc 6.0++中卻不是這樣,所以在一開始就宣告了編譯器。感興趣的朋友可以下去再不同的編譯器測試一下。

完整**請移步——>

面試陷阱

經典面試題 單鏈表之無頭刪除

在刪除乙個單鏈表的乙個資料成員時,大家都應該很清楚得有個頭,就說說簡單的尾刪吧,你的做法一定是這樣子 phead位置向後一直找到尾巴的前乙個位置,將他的next改為null,然後釋放掉尾巴就ok 看似簡單問題還是用到了phead,因為你至少得讓可動指標指向準備刪除這個成員的前乙個成員身上。中間刪,就...

經典面試題

1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...

經典面試題

我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...