第三節課作業

1、指針、引用和取值

什麼是指針?什麼是內存地址?什麼叫做指針的取值?指針是一個存儲計算機內存地址的變量。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變量地址,例如intlongdouble。指針也可以是void類型、NULL指針和未初始化指針。

根據出現的位置不同,操作符 * 既可以用來聲明一個指針變量,也可以用作指針的取值。當用在聲明一個變量時,*表示這裏聲明瞭一個指針。其它情況用到*表示指針的取值。

&是地址操作符,用來引用一個內存地址。通過在變量名字前使用&操作符,我們可以得到該變量的內存地址。

spacer.gif

2行,我們通過*操作符聲明瞭一個int指針。接着我們聲明瞭一個int變量並賦值爲1。然後我們用int變量的地址初始化我們的int指針。接下來對int指針取值,用變量的內存地址初始化int指針。最終,我們打印輸出變量值,內容爲1

6行的&val是一個引用。在val變量聲明並初始化內存之後,通過在變量名之前使用地址操作符&我們可以直接引用變量的內存地址。

8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由於指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。

這裏可以把指針、引用和值的關係類比爲信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行爲對房子沒有任何影響。

2、指針和數組

C語言的數組表示一段連續的內存空間,用來存儲多個特定類型的對象。與之相反,指針用來存儲單個內存地址。數組和指針不是同一種結構因此不可以互相轉換。而數組變量指向了數組的第一個元素的內存地址。

一個數組變量是一個常量。即使指針變量指向同樣的地址或者一個不同的數組,也不能把指針賦值給數組變量。也不可以將一個數組變量賦值給另一個數組。然而,可以把一個數組變量賦值給指針,這一點似乎讓人感到費解。把數組變量賦值給指針時,實際上是把指向數組第一個元素的地址賦給指針。

spacer.gif

 

3、指針與結構體

就像數組一樣,指向結構體的指針存儲了結構體第一個元素的內存地址。與數組指針一樣,結構體的指針必須聲明和結構體類型保持一致,或者聲明爲void類型。

spacer.gif

16行聲明瞭一個person結構體,一個變量指向了一個person結構體和指向person結構體的指針。第8行爲age成員賦了一個int值。第910行我們聲明瞭一個char指針並賦值給一個char數組並賦值給結構體name成員。第11行我們把一個person結構體引用賦值給結構體變量。

13行我們打印了結構體實例的agename。這裏需要注意兩個不同的符號,’.’ 和 ‘->’ 。結構體實例可以通過使用 ‘.’ 符號訪問age變量。對於結構體實例的指針,我們可以通過 ‘->’ 符號訪問name變量。也可以同樣通過(*ptr).name來訪問name變量。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章