最近遇到很多关于指针的概念问题,现在对几个容易模糊的概念进行对比:
一 数组指针与指针数组
数组指针:是一个指针,不过指针指向的是一个数组。
指针数组:是一个数组,不过数组元素是指针。
example:
int *p[10];//[]优先级大于*,这是一个指针,指向具有10个整形元素的数组。等价于 int(*)p[10];
int (*p)[10];//这是一个指针数组,数组元素都是指向整形的指针。
二 函数指针与指针函数
指针函数:这是一个函数,只不过返回的是一个指针。就是一个特殊一点的函数,返回值比较特殊。
函数指针:这是每一个指向函数的指针,本质上是指针。只不过指向函数。
example:
int (*p)();//这是一个函数指针,基本申明格式为:返回类型 (*函数名)(参数列表)。
int* p();//这是一个指针函数,基本申明格式为 :指针类型 函数名 参数列表。
区分函数指针和指针函数的规则是:函数指针中会用括号将*与函数名括在一起。
下面再来讲一个特殊一点的例子:
void (*s[3])(int);//函数指针数组
#include<iostream>
using namespace std;
void p1(int x)
{
cout << x << endl;
}
void p2(int x)
{
cout << x*x << endl;
}
int main()
{
void(*s[5])(int);
s[0] = p1;
s[1] = p2;
s[0](2);
s[1](2);
return 0;
}
运行结果: