Android NDK 入門學習 C語言04 理解指針的本質

什麼是指針?

舉個生活中的例子,當一個人披上護士服,我們把這個人叫做護士,當這個人披上軍服,我們又會把這個人叫做軍人。

同樣的道理,當一個變量保存的是內存中的一個值的時候,那麼這個變量就叫做普通變量,而當這個變量保存的是一個內存地址的時候,那麼這個變量就叫做指針。如果還是不理解,那麼就來看下面的圖。

在計算機裏,內存是以字節爲單位進行組織的,每一個字節都會對應一個內存地址。內存地址中,保存的則是具體的數據,很明顯,我們想要獲取某個數據,就必須找到它所在的內存地址,通過內存地址去找它。

上面我說過,指針,本質上就是一個保存着內存地址的變量。下面我們就通過代碼來看,在C語言裏,指針是如何通過代碼體現的。

先定義一個int類型的變量,變量名是number

int number = 10;

接下來創建一個指針

int    *p   ;

注意這裏的p就是指針的名字,其實就是一個變量名,只不過它保存的是一個內存地址,爲了和普通變量以示區分,所以才叫指針。

那麼接下來,我們就往p裏保存內存地址。

上面我說過,一個數據既然保存在內存中,那麼該數據就必然有它對應的內存地址,比如變量number 所保存的10,這個10它所在 的內存地址要怎麼獲取呢?

答案很簡單,只需要通過&number,就表示獲取10所在的內存地址。因爲10是保存在變量裏的,所以&number就相當於是獲取10所在的內存地址。明白了這點後,那麼就好辦了,如下代碼就表示,將&number的地址保存到指針p裏。

p = &number;

下面我們就來通過完整的程序,將p裏面的內存地址輸出來看一下

#include "CMakeProject1.h"

using namespace std;

int main()
{
	int number = 10;

	int   *p = &number;
	
	printf("%x", p);
	system("pause");
	return 0;
}

運行結果如下

這裏說明下,%x,表示將p裏的值以16進制的形式展示。

注意這裏的12ff92c就是number的內存地址,數據10就是保存在這個內存地址裏。

我們可以通過內存分析工具,親自去看一下這個內存地址是不是真的保存了一個10。

現在跟我做,根據下圖,依次點擊到內存1

在打開的窗口,按照如下輸入

現在你明白指針是什麼了吧,它其實就是一個保存着內存地址的變量,我們將這種變量叫做指針。

現在再來學習一個操作,就是通過指針獲取number中的值,代碼如下

這裏需要注意的是,%d是一個佔位符,它表示將*p獲取到的值以整數展示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章