指针有函数指针比如:int *p(int,int),数组指针比如:int (*p)[n],和普通指针int *p。除此之外还有一个指针数组int *p[n]。
函数指针的用法:函数指针有两个用途:调用函数和做函数的参数。
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;
}
//执行结果
3 1
数组指针与指针数组的区别:
举个例子说明,如下:
int * a[5] 和 int (*a)[5]
可以看出的是,他们只相差一个括号,由于存在优先级的关系(( ) > [ ] > *),如果不加括号,a会先与[ ]结合,加了括号,a则先与*结合。加括号为的是改变运算的结合顺序。
int * a[5]没有括号,a先与[ ]结合,先是个数组;
int (*a)[5]加了括号,a先和*结合,先是个指针。
故:
int * a[5]是指针数组,本质上是一个数组,数组里存放的元素是指针,指针的类型是int *型,指向一个整型数。
int (*a)[5]是数组指针,本质上是一个指针,指针所指对象是一个数组,数组的类型是int [5]型。
其实,数组指针与指针数组两个用的比较多的还是数组指针,并且多用于处理二维数组。
以上是我对C语言指针的认识。