C++指針學習體會(一)

C++的難,難在體系龐大、概念繁多,集面向過程、面向對象及泛型編程於一身,有種貪大求全的感覺,突出的難點是指針、面向對象及多範式編程。結合個人學習體會,先談談對指針的初步認識。

1.指針是一個有類型的變量,如char、int、double等;

2.指針存儲的是值的地址,而不是值本身,因此,指針名錶示的就是地址,而同時指針變量也存儲在內存中,也有其自身的地址;

3.*是解除引用運算符,應用於指針,可以得到該地址處所存儲的值;&地址引用運算符,可以得到存儲該值所在的內存地址。

有人問,既然指針是地址,通常用十六進制表示,看起來一樣,那為什麼還要區分int、double等類型呢?

因為int、double等類型的地址雖然看上去差不多,但int和double使用的字節數不同,它們存儲值時使用的內部格式也不同,因此指針在聲明時必須指定該指針所指向的數據的類型。

例:

<code>int data=0;int * p_data;p_data=&data;//上兩句等價於int *p_data=&data;cout<<data>/<code>

在上例中,p_data是指針,表示的是地址,*p_data表示存儲在該地址處的值,*p_data與int變量等效;&data是data變量的地址,與p_data等效。


C++指針學習體會(一)


*p_data的類型為int,p_data指向int類型,p_data的類型是指向int的指針(int*),int*是一種複合類型,即指向int的指針。聲明指針時,對每一個指針變量,都要使用*。當我們看到*,除了乘號,就要知道其後面跟著的是一個指針,表示的是地址。

打個比喻,變量與地址就相當於一個人的姓名和身份證號碼:當一個人出生後,他的身份證號碼是唯一的,也就是當一個變量聲明後,它的地址是固定的;這個人的名字可以更改,就像變量可以重新賦值一樣。

當我們學習函數參數按引用傳遞時,對&引用運算符會有更深的體會。


分享到:


相關文章: