【C语言进阶深度学习记录】二十四 指针与数组的本质分析一
生活随笔
收集整理的這篇文章主要介紹了
【C语言进阶深度学习记录】二十四 指针与数组的本质分析一
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 回顧--數(shù)組的本質(zhì)
- 2 指針的運(yùn)算
- 2.1 指針運(yùn)算代碼案例分析
- 3 指針的比較
- 3.1 指針運(yùn)算的應(yīng)用代碼案例分析
- 4 總結(jié)
1 回顧–數(shù)組的本質(zhì)
在之前的文章,已經(jīng)學(xué)習(xí)了數(shù)組的本質(zhì)分析。下面再來回顧一下:
- 數(shù)組是一段連續(xù)的內(nèi)存空間
- 數(shù)組名可以看做是指向數(shù)組第一個(gè)元素的常量指針
那么數(shù)組名加1的意義是什么?指針運(yùn)算呢?
看一下代碼:
- 28-1.c
- 編譯運(yùn)行的結(jié)果如下:
從以上的運(yùn)行結(jié)果來看:
- 數(shù)組名加1得到的結(jié)果是數(shù)組元素首地址的值,加上一個(gè)元素類型的大小。如上代碼是數(shù)組首元素地址加上int類型的大小4
- 對(duì)于指針的運(yùn)算:指針是一種特殊的變量,與整數(shù)的運(yùn)算規(guī)則與數(shù)組名很類似,如下圖公式(指針p):
當(dāng)指針p指向一個(gè)同類型的數(shù)組時(shí):
- p+1 將指向當(dāng)前元素的下一個(gè)元素
- p-1 將指向當(dāng)前元素的上一個(gè)元素
2 指針的運(yùn)算
下面兩點(diǎn)非常重要,務(wù)必記住;
- 指針之間只支持減法運(yùn)算。其他運(yùn)算例如加法是不支持的
- 參與減法運(yùn)算的指針類型必須相同
注意,指針雖然支持減法運(yùn)算,但是:
2.1 指針運(yùn)算代碼案例分析
- 代碼28-2.c
- 編譯運(yùn)行結(jié)果為:
-3
5
- 上述代碼注釋掉的部分編譯會(huì)出錯(cuò)。說明指針不支持除減法以外的運(yùn)算
- 減法運(yùn)算的意義在于指針?biāo)赶蛟氐南聵?biāo)差
- 不是指向同一個(gè)數(shù)組元素的指針相減,結(jié)果未定義。如上面的p0-p2=5,這的結(jié)果是未定義的.
3 指針的比較
- 指針也可以進(jìn)行關(guān)系運(yùn)算(<,<=,>,>=)
- 指針的關(guān)系運(yùn)算,只有在指針指向的數(shù)組元素在同一個(gè)數(shù)組內(nèi)才有意義。否則雖然編譯不會(huì)報(bào)錯(cuò),但是沒有什么意義。
- 參與比較運(yùn)算的指針類型必須相同,否則編譯會(huì)給出警告。且這種比較也沒有什么意義。
3.1 指針運(yùn)算的應(yīng)用代碼案例分析
- 28-3.c
- 編譯運(yùn)行結(jié)果為:
以上代碼比較簡(jiǎn)單,這里就不再分析了。
4 總結(jié)
- 數(shù)組聲明時(shí),編譯器自動(dòng)為其分配一片連續(xù)的內(nèi)存空間
- 指針聲明時(shí),只為指針分配了容納地址值的4字節(jié)空間(32位系統(tǒng))。這足以看出數(shù)組并不等于指針,兩者差異很大
- 指針可以和整數(shù)進(jìn)行運(yùn)算,其結(jié)果仍然為指針
- 兩個(gè)指向同一個(gè)數(shù)組內(nèi)元素的指針的減法運(yùn)算,代表數(shù)組元素的下標(biāo)差
- 指針之間的比較運(yùn)算需要指針的類型相同。
總結(jié)
以上是生活随笔為你收集整理的【C语言进阶深度学习记录】二十四 指针与数组的本质分析一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++深度剖析教程18】逗号操作符的分
- 下一篇: 【C语言进阶深度学习记录】二十二 指针的