在本章前幾節中,我們已經了解了什麼是位址,什麼是首位址(指標),進而知道了什麼是首位址型別(指標型別),下面,我們就把變數或函式的首位址
存入到計算機
的位址簿中.在計算機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用於分...