我的編程學習日誌(3)--教你簡單的理解數組和指針(對指針概念還模糊的看過來)

以前學c時,對指針的理解並不怎好,雖然會運用,但其實都是死記硬背,這次重新認真看了一遍終於弄懂了。

(注:有的東西只是爲了便於理解,可能並不準確)

 

1、指針的理解


在說數組之前還是先說說指針。

看看下面這段代碼:

int a=2;

int *p,*q;

p=&a;

*P=1;

 

int *p    中 p 是指,找一塊空閒的空間並命名爲p;

                       int * 是指p裏只能存放int類型變量的地址。

簡單點就是p存放的是地址而非數據。


因此在給p賦值時只能給它地址不能是數據所以用p=&a。


下面說說*p

*p是指p中的地址指向的變量中的內容(在這個程序中*p就是a中的內容,即“2”);

如果上面這段話不明白,你可以把*p理解爲a的一個別名

所以對*P賦值也就是對a賦值。


因此給*P賦值時只能給他數據,不能是地址。


這樣理解在運用時就不會把p和*P搞混了。

 

2、數組

下面說說數組

很多人對數組的理解都是錯的,其實數組就是指針,數組存放的是地址而非數據。

有的人可能對上面這段話不理解,想想我們在用指針表示數組時是怎麼做的

        

int i[5];

int *p;

p=i;

 

結合剛剛講的指針,現在就能明白了,

P=i  這裏並沒有取指符號&,因爲數組本身就是指針,指針之間相互賦值當然不用&了。


那麼如何理解i[0]的含義呢?

i[0]=*(p+0)

也就是說i[0]是*(p+0)的一種表示方法,他們兩是一個意思。

弄懂這個你就能理解數組就是指針這句話了(注意,數組存放的只是這組數據的首地址)


這裏有一個有趣的問題,

i[2]和2[i]是否一樣?


根據剛剛說的

i[2]=*(p+2),

2[i]=*(2+p),

*(p+2) =*(2+p)

所以i[2]和2[i]當然一樣了,不信的話大家可以自己編個程序試試。


發佈了26 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章