程序員面試寶典學習筆記03

5.2 面試題1

第一個運行結果爲2 1

第二個運行結果爲1 2

分析:這兩段代碼的不同之處就在for循環裏,一個有a++一個沒有。

要做對這題首先我們要知道,a++是先用a再自加1.而++a是現將a加一再作後續使用,瞭解了這一點後,我們還要知道for()循環體內部的操作是影響整個main函數的當然也包括for循環體內部。即第一個程序在for循環內判斷完後,對a進行了自加1

然後循環體內有一次對a自加了1。所以對與第一個程序,第一次循環後a=2不再滿足循環判斷條件,循環結束,此時a=2,x=1。

對與第二個程序,執行第一次循環後,a=1,x=1,!x=0,不再滿足循環條件,循環體內部將無法執行,但for括號內部x++仍可以執行,所以最終a=1,x=2.

5.2 面試題2

本題考查指針運算以及++a和a++的區別。

分析:從第九行開始,定義了一個有五個元素整數數組arr併爲其初始化爲{6,7,8,9,10}

*ptr = arr 等同於*ptr = &arr[0],即將數組arr的首地址傳遞給指針ptr(在C++中使用數組名字時,編譯器會自動的將其認爲是一個指向數組首個元素的指針)。現在相當於*ptr指向數組首個元素arr[0].

*(ptr++)+=123,等同於*ptr=*ptr+123;ptr++;前一句將ptr指針指向的數arr[0]加上了123,後一句將指針加一此時指針指向了arr[1]。(給一個指針加上或減去某個整數值,結果任然是指針,新的指針指向的元素與原來的指針相比前進了貨後退了該整數個數值)

注意區別ptr++、*ptr++、*(ptr++)以及*(++ptr)

看這樣一個程序*(++ptr)+=123;後*ptr=130、從這裏我們可以看出

*(++ptr)與*(ptr++)的區別。前者先將指針進行移位操作再與123相加,後置先加上123,再將指針後移一步。總結來說++在前就先移指針。

*ptr++相當於ptr指針指向的數加了1,我們在對指針進行前後移動時是直接用指針名加或減某個數,即ptr+a,ptr-a

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章