指標的高階宣告 指標變數的運算

2021-10-04 05:33:34 字數 1996 閱讀 4623

int f;/*宣告乙個整數*/

int *f;/*宣告乙個指向整型的指標*/

int *f,g;/*這個並不是兩個整形指標,而是乙個指標,乙個整型*/

int f();/*乙個返回值為整型的函式*/

int *f();/*本質是乙個函式,函式的返回值為指向整型的指標*/

int (*f) ();/*本質是乙個指標,指標指向乙個返回值為整型的函式*/

int *(*f) ();/*本質是乙個指標,指標指向返回值為指向整型的指標的函式*/

int f;/*陣列,陣列元素為整型*/

int *f;/*陣列,陣列元素為指向整型號的指標*/

int f();/*其實是非法的,看著像是乙個函式,函式的返回值是整型號陣列,因為函式只能返回標量,不能返回陣列*/

int f();/*其實是非法的,看著像是乙個陣列,陣列元素型別是返回值為整型的函式,因為陣列元素具有相同的長度,但不同的函式顯然可能具有不同的長度*/

int (*f) ();/*本質是陣列,陣列的元素是指標,指標指向具有整型返回值的函式*/

int *(*f) ();/*本質是陣列,陣列的元素是指標,指標指向具有返回值為整型指標的函式*/

int (*f)(int,float);/*是乙個函式指標,指向具有返回值為整型的函式*/

int *(*g)(int,float);/*是乙個陣列,陣列的元素是函式指標,指標指向的函式具有的返回值型別是指向整型的指標*/`

指標變數可以進行某些運算,但其運算的種類是有限的。 它只能進行賦值運算和部分算術運算及關係運算。

(1)取位址運算子&

取位址運算子&是單目運算子,其結合性為自右至左,其功能是取變數的位址。

(2)取內容運算子*

取內容運算子是單目運算子,其結合性為自右至左,用來表示指標變數所指的變數。在運算子之後跟的變數必須是指標變數。

需要注意的是指標運算子和指標變數說明中的指標說明符 不是一回事。在指標變數說明中,「」是型別說明符,表示其後的變數是指標型別。而表示式**現的「」則是乙個運算子用以表示指標變數所指的變數。

指標變數的賦值運算有以下幾種形式:

(1)指標變數初始化賦值。

(3)把乙個指標變數的值賦予指向相同型別變數的另乙個指標變數。

(4)把陣列的首位址賦予指向陣列的指標變數。

(5)把字串的首位址賦予指向字元型別的指標變數。

(6)把函式的入口位址賦予指向函式的指標變數。

指標型別屬於標量型別,因此也可以做邏輯與、或、非運算的運算元和if、 for、 while的控制表示式, null指標表示假,非null指標表示真。

所有的資料都是存放在儲存器中的, 一般把儲存器中的乙個位元組稱為乙個記憶體單元,不同的資料型別所占用的記憶體單元數不等。

為了正確地訪問這些記憶體單元, 必須為每個記憶體單元編上號, 根據乙個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做位址。 既然根據記憶體單元的編號或位址就可以找到所需的記憶體單元,所以通常也把這個位址稱為指標。

對於乙個記憶體單元來說,單元的位址即為指標, 其中存放的資料才是該單元的內容。

在c語言中, 允許用乙個變數來存放指標,這種變數稱為指標變數。因此, 乙個指標變數的值就是某個記憶體單元的位址或稱為某記憶體單元的指標。嚴格地說,乙個指標是乙個位址, 是乙個常量。而乙個指標變數卻可以被賦予不同的指標值,是變數。 但常把指標變數簡稱為指標。

定義指標的目的是為了通過指標去訪問記憶體單元。 既然指標變數的值是乙個位址, 那麼這個位址不僅可以是變數的位址, 也可以是其它資料結構的位址。

在c語言中, 一種資料型別或資料結構往往都占有一組連續的記憶體單元。 用「位址」這個概念並不能很好地描述一種資料型別或資料結構, 而「指標」雖然實際上也是乙個位址,但它卻是乙個資料結構的首位址, 它是「指向」乙個資料結構的,因而概念更為清楚,表示更為明確。 這也是引入「指標」概念的乙個重要原因。

注意:不管是程式設計師還是計算機都無法通過值的位模式來判斷它的型別,型別是通過值的使用方法來隱式確定的,編譯器能夠保證值的宣告和值的使用之間的關係是恰當的,從而幫助我們確定值得型別。

指標的高階宣告

現在也不記得是在那裡看到這篇總結的,如果你是原創,麻煩跟我說下,希望不會有侵權之說。在使用指標之前,我們必須觀察它是如何宣告的 1,簡單的例子 int f 乙個整形變數 int f 乙個整形指標 2,不簡單的例子 int f 乙個返回整形指標的函式 int f 乙個返回整形的函式指標 3,較複雜的例...

指標變數的運算

一 指標變數的運算 p p p p 四者之間的差別 首先說一下 運算的優先順序 和 同優先順序,結合方向為自右向左 1 p,則相當於 p 給p指向的變數 1,然後取該變數的值。通俗一點就是 在前,先自增 p 指向的值,值由6變為7,然後取出。圖展示如下 二 p 則是先取p指向的變數值,然後該變數 1...

C語言中宣告指標的時候注意點

c語言中宣告指標的時候最好指定指標初始值,這樣的習慣可以避免指標洩漏錯誤 如下例子 include include struct in addr struct in addr ipaddr intmain 這裡報錯記憶體洩漏,問題在於只是定義了乙個指標,並沒有定義乙個struct in addr結構...