1、內存地址
用戶在程序中定義了一個變量,對程序進行編譯時,系統就會給這個變量分配內存單元,內存區的每一個字節都有一個編號,這就是內存地址,相當于旅館的房間號,內存地址所表示的內存單元中存放的數據就相當于這個房間住的旅客,假設內存地址0x00000028中存放了一個字節的數據0x28,那么如果我找到了這個內存地址,也就相當于我查到了這里面的數據0x28,可以說地址指向該變量的單元,因此,將地址稱為了指針,意思就是說通過它可以找到以它為地址的內存單元。
2、指針變量與指針
一個變量存放的地址就稱為該變量的指針,如果有一個變量專門用來存放另一個變量的地址,那這個變量就稱為指針變量,指針變量的值是地址。
3、指針變量的定義:通常在變量名前面加一個“*”就代表這是一個指針變量,如下圖所示。
第9行和第10行都是定義了一個名為num的字符型指針變量,不過推薦使用第10行的定義方式,如果不進行地址初始化,就會成為所說的野指針(就是不知道指向哪個位置了)。
4、指針變量的賦值:指針變量的賦值如下圖所示。
首先定義了一個指針變量num,然后定義了一個變量a,并設置a的值為0xAA,現在將a的地址傳給num,這就有了第11行的語句,其中&代表取址,即獲取變量a所在的地址,此時可以將num指向的數據打印出來。
此時程序的運行結果如下圖所示。
顯然,此時指針變量指向的地址是007CF80B H,這個內存單元中存放的數據為100,就是變量a的初始值。
5、指針變量的使用
現在來進行一個實驗,將變量a的值和變量b的值交換,程序如下圖所示。
程序運行結果如下圖所示。
現在思考這么一個問題,為什么交換兩個數據要使用指針的方式呢,定義全局變量不是也可以達到這個效果嗎?首先全局變量在編程的過程中要保證越少越好,因為全局變量的命名規則是不允許重復的,全局空間因為處于最頂層也是最大的命名空間里,所以變量名要保持獨立,不沖突,就需要更完整的表達它的含義,所以名字就會更傾向于寫的很長。全局變量數量越多,取名的難度就會更大,其次,有的時候全局變量太多會有一些莫名其妙的BUG,但是即想要少用全局變量,又要達到數據共享的目的要怎么辦。
這就有兩種途徑,一種是子函數的返回值,另一種就是指針,調用子函數的返回值會耗費掉一部分時間,這個時間在計算機編程中獲取可以忽略不計,但是在后續的單片機編程中就會格外顯眼,一般為了保證控制系統的實時性,一些重要的代碼都會放在中斷里執行,此時,只需要用指針指向對應的內存地址,需要的時候讀一下即可,指針可以定義成局部指針變量,也就解決了全局變量過多的問題。
-
內存
+關注
關注
8文章
3019瀏覽量
74007 -
C語言
+關注
關注
180文章
7604瀏覽量
136696 -
指針
+關注
關注
1文章
480瀏覽量
70551
發布評論請先 登錄
相關推薦
評論