第10章 指標 四 位址簿 指標變數

2021-08-23 13:42:07 字數 3702 閱讀 5823

在本章前幾節中,我們已經了解了什麼是位址,什麼是首位址(指標),進而知道了什麼是首位址型別(指標型別),下面,我們就把變數或函式的首位址

存入到計算機

的位址簿中.在計算機c程式中,無論是記錄變數

的首位址,還是函式

的首位址,都需要建立計算機所特有的位址簿。好,讓我們來開始建立吧。

一、指標變數

前面的程式設計知識告訴我們,電腦程式中的資料,我們可以存放在變數中,那麼,首位址作為一種重要的資料,同樣也可以存放在變數中。你現在應該已經很清楚的一點是:變數需要先定義,再使用!好,我們開始定義存放首位址的變數。存放整型數時,我們定義的是int、short、long、unsigned

等型別的變數,存放浮點數,定義float、double等型別;也就是什麼型別的資料要存放,我們就定義相應型別的變數。沿著這個思路下去,上一節我們已經知道,首位址是有型別的 ,那麼,我們要存放哪種型別的首位址,就必須定義它那種型別的變數。舉例如下:

首先:比如,現有int變數 i ;其首位址&i將被儲存;我們已經知道,&i 的型別是 int * ;因此,我們需要用型別int *,定義乙個變數,不妨起變數名為:p_i,於是有定義語句:int *p_i ;這樣定義的p_i,就可以存放首位址&i ,當然是用賦值語句來實現存放,即:p_i=&i ;

其次 :

再如,我們已經知道,對於

陣列float a[3];陣列名a就是其首位址,且型別float * ;因此,需先定義乙個float *型別的變數:float *p_a;而後,把將a賦給p_a:p_a=a ;

第三:對於函式int main(void),其首位址就是main,型別是int (*)(void);因此,需要定義int (*)(void)型別的變數:int (*

p_main

)(void);而後,把main存入p_main中:p_main=main ;

注:1、不清楚

變數的首位址及其型別是如何來的,返回《第2節 首位址與指標》、《第3節 指標型別》!

2、在定義

儲存首位址的變數時,變數名必須緊跟著*號。

3、儲存指標的變數就是「指標變數」。

二、指標陣列

當你有1個整數10,你可以定義int i,而後賦值:i=10;i中存放的是int型別的數。如果有5個整數1,2,3,4,5,你可定義陣列int j[5];而後賦值j[0]=1;j[1]=2;j[2]=3;j[3]=4;j[4]=5;陣列j 中存放的是5個int型別的數。int型別的數,是一種整數,因此陣列j是一種整型陣列。

當你有1個浮點數1.5,你可以定義float f,而後賦值:f=1.5;變數f中存放的是float型別的數。如果有4個浮點數1.5,2.5,3.5,4.5,你可定義陣列float g[4];而後賦值g[0]=1.5;g[1]=2.5;g[2]=3.5;g[3]=4.5;陣列g中存放的是4個float型別的數。float型別 的數,是浮點數,因此陣列g是一種浮點型陣列。

當你有1個字元'a',你可以定義char c,而後賦值:c='a';變數c中存放的是char型別的數。如果有3個字元』a','b','c',你可定義陣列char d[3];而後賦值d[0]='a';d[1]='b';d[2]='c';陣列d中存放的是3個char型別的數。char型別的數,是字元,因此陣列 d是一種字元陣列。

當你有1個整型變數m ,首位址&m,你可以定義int *p_m,而後賦值:p_m=&m;p_m 這個變數中存放的是int *型別的數。如果有3個整型變數m,n,o,你就有3個首位址,這時,你可定義陣列int *p_n[3];而後賦值p_n[0]=&m;p_n[1]=&n;p_n[2]=&o;p_n這個陣列中存放的是3個int *型別的數。int *型別的數,是指標,因此p_n是一種指標陣列

三、指標的指標

張三,其位址是中國北京復興門外南禮***號,通過這個位址我們可以找到他,我們可以用下面語句, 形象的描述位址和張三的關係:位址指向了張三。正因有了這種指向作用 ,位址被稱為了指標。當回到c程式中, 你已經知道了,若有變數char i,首位址(或說指標)&i可用char *p_i; 儲存,即p_i=&i;因為p_i中的位址&i是指向i 的 ,所以

p_i是

變數i的。

1、指標變數的指標

p_i指標變數

,因此&p_i稱為指標變數的首位址

, 即指標變數的指標

。2、指標變數的指標

型別

i的型別

是:char, 因此&i的型別為

char *;

p_i的型別:char *,因此&p_i的型別:char **,又多了乙個星號!

3、儲存指標變數的指標

既然&p_i的型別是char **,那麼

若你用char ** 定義乙個變數:char **

p_p_i; 就可用語句p_p_i=&p_i,把&p_i存入p_p_i中.

4、

總結上面如下:

&i &p_i

i-----------

-----------

>

p_i-----------

-----------

-

-------------->

p_p_i.

p_i存放了

i的首位址&i,

p_p_i

存放了

p_i的首位址&p_i

;5、由於存放了&p_i,指標變數p_p_i指向了另乙個指標變數p_i。

&i

&p_i

i<

-----------

----------------

p_i

<

----------------

----------------

p_p_i.

p_p_i指向p_i,p_i又指向i;

象p_p_i這種指

指標變數

的指標變數,簡稱為指標的指標

6、儲存指標變數的首位址, 常見在字串處理中, 後面我們會看到。

這就是用指標變數儲存指標的全部!對,一切的一切就是這麼簡單,哈,勝利向我們招手,曙光就在前頭!

C語言基礎07 位址和指標

7.1位址和指標的概念 程式中只需指出變數名,無需知道每個變數在記憶體中的位址,每個變數與具體位址之間的聯絡由c編譯系統來完成。記憶體單元內容 printf d i 根據變數名與位址的對應關係,關係在編譯時就已經確定,找到變數i的位址,然後由位址開始的4個位元組中取出資料,即變數的值,把它輸出。將變...

菜鳥C 學習筆記 16 位址和指標

includeusing namespace std int main 注意 不同的編譯器輸出的結果是不一樣的。2 指標 用於直接對記憶體進行操作 定義方法 在指標變數前加星號 例如 includeusing namespace std int main int i 1 int p 注意這個指標變數...

第10章 再論指標

用於實現多維陣列的指標陣列,必須用指向為字串而分配的記憶體的指標進行初始化,即一次性用malloc分配整個x y個資料的陣列 malloc row size col size sizeof char 然後使用乙個迴圈,用指標指向這塊記憶體的各個區域。整個陣列保證能夠儲存在連續的記憶體中,即按c用於分...