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