【C/C++语言系列】指针数组、数组指针、函数声明和函数指针区别
以前学习时经常分不清以下几个类型:
- int* p[10];
- int(*p)[10];
- int* p(int *)
- int(*p)(int *)
接下来就介绍下怎么区分它们:
到底是指针还是数组?
首先看变量名p与‘’结合还是[]结合 ,在C语言中,运算符的优先级为() == [] > *,结合性都是从左到右。所以int p[10]是一个数组,因为p先于[]结合,而int(*p) [10]是一个指针。
int* p[10]:指针数组
p是一个数组;
数组中存的10个数都是int*类型的。
int(*p)[10]:数组指针
p是一个指针;
指向一个大小为10的int数组,该数组名未知。
函数声明还是函数指针?
同上面一样,依然看优先级。
int* p(int *):函数声明
函数名p,返回值类型int*,参数类型int*
int(*p)(int*):函数指针
p是一个指针,指向一个匿名函数,
该函数返回值类型int,参数类型int*
参考连接