一、指針
int t | 定義整型變量 |
int *p | p為指向整型數據的指針變量 |
int a[n] | 定義整型數組a,它有n個元素 |
int *p[n] | 定義指針數組p,它由n個指向整形數據的指針元素組成 |
int (*p)[n] | p為指向含n個元素的一維數組的指針變量 |
int f() | f為返回整型函數值的函數 |
int *f() | p為返回一個指針的函數,該指針指向整型數據 |
int (*f)() | p為指向函數的指針,該函數返回一個整形值 |
int **p | p是一個指針變量,它指向一個指向整形數據的指針變量 |
二、指針與變量
三、指針與數組
指針數組
(1)定義
(2)定義形式:類型名 *數組名[數組長度]
如要將二維數組賦給一指針數組:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];
這里int *p[3] 表示一個一維數組內存放着三個指針變量,分別是p[0]、p[1]、p[2]
所以要分別賦值。
注:指針數組常適用於指向若干字符串,這樣使字符串處理更加靈活方便
數組指針
(1)定義
(2)定義形式 類型名 (*指針變量名)[數組長度]
如要將二維數組賦給一指針,應這樣賦值:
int a[3][4];
int (*p)[4]; //該語句是定義一個數組指針,指向含4個元素的一維數組。
p=a; //將該二維數組的首地址賦給p,也就是a[0]或&a[0][0]
p++; //該語句執行過后,也就是p=p+1;p跨過行a[0][]指向了行a[1][]
所以數組指針也稱指向一維數組的指針,亦稱行指針。
注:
四、指針與字符串
(1)char* string;string="I love China!";但不可以char string[14];string="I love China!";
(2)定義字符數組后,在編譯時為它分配內存單元,它有確定的地址;而定義一個字符指針,在使用前必須為其指向具體的地址;
如下面是正確的:
char *s,str[10];s=str;
五、指針與函數
指針函數
(1)定義:指針函數是指函數的返回值類型是一個指針類型,即本質是一個函數
(2)定義形式:數據類型 * 函數名(參數列表)
注:
函數指針
(1)定義:指向函數的指針
(2)定義形式:數據類型 (*指針變量名)(參數列表)
注:一般傳輸一函數指針,返回處理后的該指針地址
I,在給函數指針變量賦值時,只需給出函數名而不必給出參數(因為是將函數入口地址賦給函數指針,而不涉及實參與形參的結合的問題),如:
int max(int,int);
int (*p)(int,int);
p=max;
II,用函數指針變量調用函數時,只需將指針名代替函數名即可,括號中需要實參,如
int c;
c=(*p)(a,b);