C語言學習4 指標

2021-10-02 20:48:00 字數 2308 閱讀 4127

int a =10;

int*p =

&a; 一級指標

int*

*s =

&p; 二級指標

int(

*p)[10]

; 指向陣列的指標

int*

(*s)[10

]; 指標指向放指標的陣列 這個陣列有十個空間

int*p[10]

; 開闢10個空間 每個空間放指標

例如:int

*br[10]

;int*(

*s)[10]

=&br;

int ar[10]

;int

(*p)[10

]=&ar;

例子:

int ar[5]

[2]=

;int

(*p)[2

]=&ar[1]

;int

*s =

(int

*)ar[1]

;printf

("%d %d/n"

, p[1]

[3], s[3]

);return

0;

解題思路:

[3] 可以看做*(*(p+

1)+3),s[3

] 看作*(p+

這個語句就定義了乙個指向函式的指標變數 p。首先它是乙個指標變數,所以要有乙個「*」,即(*p);

其次前面的 int 表示這個指標變數可以指向返回值型別為 int 型的函式;後面括號中的兩個 int 表示這個指標變數可以指向有兩個引數且都是 int 型的函式。所以合起來這個語句的意思就是:

定義了乙個指標變數 p,該指標變數可以指向返回值型別為 int 型,且有兩個整型引數的函式。p 的型別為 int(*)(int,int)。

函式返回值型別 (

* 指標變數名)

(函式引數列表)

;

「函式返回值型別」表示該指標變數可以指向具有什麼返回值型別的函式;

「函式引數列表」表示該指標變數可以指向具有什麼引數列表的函式。這個引數列表中只需要寫函式的引數型別即可。

需要注意的是:

1.指向函式的指標變數沒有 ++ 和 – 運算。

2.也不能*引用

int

func

(int x)

;/*宣告乙個函式*/

int(

*p)(

int x)

;/*定義乙個函式指標*/

p = func;

/*將func函式的首位址賦給指標變數p*/

賦值時函式 func 不帶括號,也不帶引數。由於函式名 func 代表函式的首位址,因此經過賦值以後,指標變數 p 就指向函式 func() **的首位址了。

下面來寫乙個程式,看了這個程式你們就明白函式指標怎麼使用了:

# include

intmax

(int

,int);

//函式宣告

intmain

(void

)int

max(

int x,

int y)

//定義max函式

else

return z;

}

輸出結果是:

please enter a and b:34

a =3

b =4

max =

4

ps:

int

(*pfun[3]

)(int,

int)

; 開闢三個空間,每個空間儲存乙個函式指標

int(*(

*p)[3]

)(int,

int)

; 指標指向了存放了函式指標的陣列,這個陣列大小為3

C語言學習(三) 指標

指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...

C語言學習6指標

1.指標與指標變數 2.直接訪問和間接訪問 3.指標的定義格式 方法一 int a int p a 方法二 int p,a p a 1.概念2.一般形式定義 int b 3 指標陣列,表示有三個元素,每個元素都是int int p 3 陣列指標,也可為行指標,它指向包含3個元素的一維陣列 1.定義乙...

C語言學習筆記02 指標

指標也是一種變數,占有記憶體空間,用來儲存記憶體位址。在指標宣告時,號代表所宣告的變數為指標。在指標使用時,號表示操作指標所指向的記憶體空間的值。p相當於通過位址 p變數的值 找到一塊記憶體,然後操作記憶體。p放在等號的左邊賦值 給記憶體賦值 p放在等號的右邊取值 從記憶體獲取值 指標變數和它所指向...