C語言的指針

我們在使用c語言進行編寫程序的時候,就一定會使用上指針,指針的操作是編寫程序的一個點。

C語言的指針

這裏,小編就分享一下自己在使用c語言編程過程中,對於指針的理解:

系統爲每一個內存單元分配一個地址值,C/C++把這個地址值稱爲“指針”。如有int i=5;,存放變量i的內存單元的編號(地址)&i被稱爲指針。

指針變量”則是存放前述“地址值”的變量,也可以表述爲,“指針變量”是存放變量所佔內存空間“首地址”的變量(因爲一個變量通常要佔用連續的多個字節空間)。比如在int i=5;後有一句int *p=&i;,就把i的指針&i賦給了int *型指針變量p,也就是說p中存入着&i。所以說指針變量是存放指針的變量。

有一個事實值得注意,那就是有不少資料和教科書並沒有如上區分,而是認爲“指針是指針變量的簡稱”,如對int *p=&i;的解釋是:聲明一個int *型指針p,並用變量i的地址初始化;而嚴格說應該是聲明一個int *型指針變量p纔對。所以有時看書要根據上下文理解實質,而不能過於拘泥於文字表述。

  1:指針是一個地址,指向的是個類型:

我們知道,c語言中的類型有int,char,bool(這個不常用),一般我們使用int,char就可以滿足一般的類型需求的,如果對於變量的長度過大,就是用long ,float,double,關於各個類型使用的的長度問題,可以使用sizeof(int)或者sizeof(long)來查看各個類型,在系統中的小。

而指針就是一個8個字節(64系統)。

  2:指針指向的是地址,地址指向的是內容:

我們需要一個變量,來存儲地址,這個變量的值是地址,但是我們可以通過修改變量的.值,來不斷的改變地址,但是,我們如果需要改變該個地址的值的話,就需要,對地址的值進行修改,而不改變地址。

int a = 10;

int *p ;

p = &a;

*p =11;

a=?

這裏我們看到,p 是一個變量,我們使用p來存儲變量a的地址,這是,我們使用*p對於這個變量進行賦值,那麼a的值最後,是多少呢,結果是11,因爲我們使用*p賦值,就相當於a=11,賦值效果一樣的。

  3:指針的指針,是面對於指針的變量:

我們說,指針的指針的時候,就有點不清楚了,到底怎麼區分指針和指針的指針呢。

char *p;

char **pr;

pr = &p;

我們這樣看就清楚了一點,char *(*pr); *pr是一個存儲的值爲指針的變量,pr就是存儲上個變量地址的變量。整合起來就是,pr是一個存儲的值爲指針的地址的變量。

這樣,我們就基本,對於指針有一個直接的瞭解了。