例子: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.也不能*引用
賦值時函式 func 不帶括號,也不帶引數。由於函式名 func 代表函式的首位址,因此經過賦值以後,指標變數 p 就指向函式 func() **的首位址了。int
func
(int x)
;/*宣告乙個函式*/
int(
*p)(
int x)
;/*定義乙個函式指標*/
p = func;
/*將func函式的首位址賦給指標變數p*/
下面來寫乙個程式,看了這個程式你們就明白函式指標怎麼使用了:
輸出結果是:# include
intmax
(int
,int);
//函式宣告
intmain
(void
)int
max(
int x,
int y)
//定義max函式
else
return z;
}
ps:please enter a and b:34
a =3
b =4
max =
4
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放在等號的右邊取值 從記憶體獲取值 指標變數和它所指向...