C C 經典面試題

2022-06-29 08:51:09 字數 868 閱讀 6589

2018-03-07

昨天在牛客上看到這麼一道c語言面試題,挺經典的,特來分享給大家。

程式如下,問輸出結果

#include int

main ()

;

int *p = (int*)(&a + 1

); printf(

"%d %d

" , *(a + 1), *(p - 1

));}

*(a+1)其實很簡單,指的就是a[1],輸出2,沒問題。關鍵就在於這個第二個輸出*(p-1)是多少?

學過c語言的都知道,陣列名就是指向陣列首元素的指標,那麼對陣列名進行取位址操作得到的是什麼呢?對陣列名 a 取位址得到的是指向陣列的指標!!!(注意:不是指向陣列首元素的指標)。也就是說 &a 是陣列指標,型別為 (int*)[5],而指標加一要根據指標的型別進行偏移,&a 是長度為5的 int 陣列指標,所以需要偏移 5 * sizeof(int),所以也就是 a[5] 的位置,另外需要注意p(&a + 1)型別是不一樣的,這點非常重要,所以p - 1只會減去sizeof(int*)a&a的位址是一樣的,但意思就不一樣了,a是陣列首位址,也就是a[0]的位址,&a是物件(陣列)首位址,a+1是陣列下一元素的位址,即a[1],

ps:a是 int 型指標,&a 是 int 型指標

到這裡,答案也就不言而喻了,輸出結果分別為 2和 5。

持續更新

經典C C 面試題

1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...

經典C C 面試題

1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...

經典C C 面試題(三)

1 什麼是預編譯,何時需要預編譯 總是使用不經常改動的大型 體。程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項。在這種情況下,可以將所有包含檔案預編譯為乙個預編譯頭。2 char const p char const p const char p 上述三個有什麼區別?char ...