【秋招】嵌入式面試八股文-C語言 數(shù)組/指針
1 數(shù)組
1.1 數(shù)組指針
- 數(shù)組指針就是指向數(shù)組的指針,它表示的是一個(gè)指針,這個(gè)指針指向的是一個(gè)數(shù)組,它的重點(diǎn)是指針。 例如, int(*pa)[8] 聲明了一個(gè)指針,該指針指向了一個(gè)有8個(gè)int型元素的數(shù)組下面給出一個(gè)數(shù)組指針的示例(圖片點(diǎn)開觀看會(huì)很清晰)
- 上面程序的輸出結(jié)果為 5
- 上例中,p是一個(gè)數(shù)組指針,它指向一個(gè)包含有4個(gè)int類型數(shù)組的指針,剛開始p被初始化為指向數(shù)組b 的首地址,++p相當(dāng)于把p所指向的地址向后移動(dòng)4個(gè)int所占用的空間,此時(shí)p指向數(shù)組{5,6,7,8},語句 *(++p); 表示的是這個(gè)數(shù)組中第一個(gè)元素的地址(可以理解p為指向二維數(shù)組的指針,{1,2,3,4}, {5,6,7,8},{9,10,11,12}p指向的就是{1,2,3,4}的地址,*p 就是指向元素,{1,2,3,4}, **p 指向的就是1,語句**(++p)會(huì)輸出這個(gè)數(shù)組的第一個(gè)元素5
1.2 指針數(shù)組
- 指針數(shù)組表示的是一個(gè)數(shù)組,而數(shù)組中的元素是指針下面給出另外一個(gè)指針數(shù)組的示例(圖片點(diǎn)開觀看會(huì)很清晰):
- 程序的輸出結(jié)果為1234。
1.3 數(shù)組下標(biāo)可以為負(fù)數(shù)嗎?
- 可以,因?yàn)橄聵?biāo)只是給出了一個(gè)與當(dāng)前地址的偏移量而已,只要根據(jù)這個(gè)偏移量能定位得到目標(biāo)地址即可
2 指針
2.1 函數(shù)指針
- 如果在程序中定義了一個(gè)函數(shù),那么在編譯時(shí)系統(tǒng)就會(huì)為這個(gè)函數(shù)代碼分配一段存儲(chǔ)空間,這段存儲(chǔ)空間的首地址稱為這個(gè)函數(shù)的地址而且函數(shù)名表示的就是這個(gè)地址既然是地址我們就可以定義一個(gè)指針變量來存放,這個(gè)指針變量就叫作函數(shù)指針變量,簡(jiǎn)稱函數(shù)指針(圖片點(diǎn)開觀看會(huì)很清晰)
- 這個(gè)語句就定義了一個(gè)指向函數(shù)的指針變量 p首先它是一個(gè)指針變量,所以要有一個(gè)“*”,即 (*p); 其次前面的 int 表示這個(gè)指針變量可以指向返回值類型為 int 型的函數(shù);后面括號(hào)中的兩個(gè) int 表示這個(gè) 指針變量可以指向有兩個(gè)參數(shù)且都是 int 型的函數(shù)所以合起來這個(gè)語句的意思就是:定義了一個(gè)指針變量 p,該指針變量可以指向返回值類型為 int 型,且有兩個(gè)整型參數(shù)的函數(shù)p 的類型為 int(*) (int,int)
- 我們看到,函數(shù)指針的定義就是將“函數(shù)聲明”中的“函數(shù)名”改成“(指針變量名)”但是這里需要注意的是:“(指針變量名)”兩端的括號(hào)不能省略,括號(hào)改變了運(yùn)算符的優(yōu)先級(jí)如果省略了括號(hào),就不是定義函數(shù)指針而是一個(gè)函數(shù)聲明了,即聲明了一個(gè)返回值類型為指針型的函數(shù)
重要:最后需要注意的是,指向函數(shù)的指針變量沒有 ++ 和 -- 運(yùn)算(圖片點(diǎn)開觀看會(huì)很清晰)
2.2 指針函數(shù)
- 首先它是一個(gè)函數(shù),只不過這個(gè)函數(shù)的返回值是一個(gè)地址值函數(shù)返回值必須用同類型的指針變量來接受,也就是說,指針函數(shù)一定有“函數(shù)返回值”,而且,在主調(diào)函數(shù)中,函數(shù)返回值必須賦給同類型的指針變量
- 類型名 *函數(shù)名(函數(shù)參數(shù)列表)
- 其中,后綴運(yùn)算符括號(hào)“()”表示這是一個(gè)函數(shù),其前綴運(yùn)算符星號(hào)“*”表示此函數(shù)為指針型函數(shù),其函數(shù)值為指針,即它帶回來的值的類型為指針,當(dāng)調(diào)用這個(gè)函數(shù)后,將得到一個(gè)“指向返回值為…的指針(地址),“類型名”表示函數(shù)返回的指針指向的類型”
- “(函數(shù)參數(shù)列表)”中的括號(hào)為函數(shù)調(diào)用運(yùn)算符,在調(diào)用語句中,即使函數(shù)不帶參數(shù),其參數(shù)表的一對(duì)括號(hào)也不能省略其示例如下:
- 由于“*”的優(yōu)先級(jí)低于“()”的優(yōu)先級(jí),因而pfun首先和后面的“()”結(jié)合,也就意味著,pfun是一個(gè)函數(shù)即:
- 接著再和前面的 “*” 結(jié)合,說明這個(gè)函數(shù)的返回值是一個(gè)指針由于前面還有一個(gè)int,也就是說,pfun是一個(gè)返回值為整型指針的函數(shù)。(圖片點(diǎn)開觀看會(huì)很清晰)
- 共有三個(gè)學(xué)生的成績,函數(shù)find()被定義為指針函數(shù),其形參pointer是指針指向包含4個(gè)元素的一維數(shù)組 的指針變量pointer+n指向score的第n+1行*(pointer+1)指向第一行的第0個(gè)元素pt是一個(gè)指針變 量,它指向浮點(diǎn)型變量main()函數(shù)中調(diào)用find()函數(shù),將score數(shù)組的首地址傳給pointer。
2.3 數(shù)組和指針的區(qū)別與聯(lián)系是什么?
(1)存儲(chǔ)方式
- 數(shù)組通常存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)或棧上;指針可以隨時(shí)隨地地指向任意類型的內(nèi)存塊
- 數(shù)組在內(nèi)存中是連續(xù)存放的,開辟一塊連續(xù)的內(nèi)存空間數(shù)組是根據(jù)數(shù)組的下標(biāo)進(jìn)行訪問的;指針很靈活,它可以指向任意類型的數(shù)據(jù)指針的類型說明了它所指向地址空間的內(nèi)存
(2)求sizeof
- 數(shù)組:
- 數(shù)組所占存儲(chǔ)空間的內(nèi)存:sizeof(數(shù)組名)
- 數(shù)組的大?。簊izeof(數(shù)組名)/sizeof(數(shù)據(jù)類型)
- 指針:
- 在32位平臺(tái)下,無論指針的類型是什么
剩余60%內(nèi)容,訂閱專欄后可繼續(xù)查看/也可單篇購買
【秋招】嵌入式八股文最全總結(jié) 文章被收錄于專欄
雙非本,211碩。本碩均為機(jī)械工程,自學(xué)嵌入式,在校招過程中拿到小米、格力、美的、比亞迪、海信、???、大華、江波龍等offer。八股文本質(zhì)是需要大家理解,因此里面的內(nèi)容一定要詳細(xì)、深刻!這個(gè)專欄是我個(gè)人的學(xué)習(xí)筆記總結(jié),是對(duì)很多面試問題進(jìn)行的知識(shí)點(diǎn)分析,專欄保證高質(zhì)量,讓大家可以高效率理解與吸收里面的知識(shí)點(diǎn)!掌握這里面的知識(shí),面試絕對(duì)無障礙!