? ? ? 指針有函數(shù)指針比如:int *p(int,int),數(shù)組指針比如:int (*p)[n],和普通指針int *p。除此之外還有一個(gè)指針數(shù)組int *p[n]。
函數(shù)指針的用法:函數(shù)指針有兩個(gè)用途:調(diào)用函數(shù)和做函數(shù)的參數(shù)。
int add (int a, int b) {
? ? return a + b;
}
int sub (int a, int b) {
? ? return a - b;
}
int main()
{
? ? int (*fun)(int, int);
? ? fun = add;
? ? int result = fun(2, 1);
? ? cout << result << endl;
? ? fun? = sub;
? ? result = fun(2, 1);
? ? cout << result << endl;
? ? return 0;
}
//執(zhí)行結(jié)果
3 1
數(shù)組指針與指針數(shù)組的區(qū)別:
舉個(gè)例子說(shuō)明,如下:
int * a[5] 和 int (*a)[5]
可以看出的是,他們只相差一個(gè)括號(hào),由于存在優(yōu)先級(jí)的關(guān)系(( ) > [ ] > *),如果不加括號(hào),a會(huì)先與[ ]結(jié)合,加了括號(hào),a則先與*結(jié)合。加括號(hào)為的是改變運(yùn)算的結(jié)合順序。
int * a[5]沒(méi)有括號(hào),a先與[ ]結(jié)合,先是個(gè)數(shù)組;
int (*a)[5]加了括號(hào),a先和*結(jié)合,先是個(gè)指針。
故:
int * a[5]是指針數(shù)組,本質(zhì)上是一個(gè)數(shù)組,數(shù)組里存放的元素是指針,指針的類(lèi)型是int *型,指向一個(gè)整型數(shù)。
int (*a)[5]是數(shù)組指針,本質(zhì)上是一個(gè)指針,指針?biāo)笇?duì)象是一個(gè)數(shù)組,數(shù)組的類(lèi)型是int [5]型。
? ? ? ? 其實(shí),數(shù)組指針與指針數(shù)組兩個(gè)用的比較多的還是數(shù)組指針,并且多用于處理二維數(shù)組。
以上是我對(duì)C語(yǔ)言指針的認(rèn)識(shí)。