首页 > 代码库 > 复杂的指针结构应如何理解
复杂的指针结构应如何理解
1. 数组的定义
数组由数组元素的类型,数组名,[]以及数组长度构成。
int a[10] = {0}; //显式的数组长度10int b[] = {1, 2, 3}; //隐式的数组长度3
2. 指针的定义
C++语言使用*符号把一个标识符声明为指针。
int *p1, *p2; //p1 and p2 point to an intstring *pstring; //pstring points to a string
3. 函数指针的定义
函数指针由标识符,返回值,参数列表组成
void (*funcPtr)(int, int);
阅读这类复杂的声明时,通用的方法是:从中间开始,依次向两边展开。
从中间开始是指,从变量名称开始,在这个例子中也就是funcPtr。然后去变量右侧寻找最近的元素(无),然后去左侧(*,表示funcPtr是一个指针),然后右侧((int, int),参数列表),然后左侧(void,返回值)。所以funcPtr是一个指向参数列表为(int, int),返回值为void类型函数的指针。
下面再看一些复杂的例子:
void *(*(*fp1)(int))[10];
fp1临近右侧无,左侧*,所以fp1为指针,右侧紧跟参数列表(int)表明fp1是函数指针,且函数的参数列表为(int), 所以其余部分应为函数返回值,若用fp_ret来简化,则可表示为:
void *(*fp_ret)[10];
fp_ret是一个指针,指向长度为10的数组,数组中的元素类型为void*。所以综合起来就是:fp1是一个函数指针,其指向的函数具有一个int类型的参数,且返回值为一个指针,该指针指向一个有10个void*元素的数组。
typedef double (*(*(*fp3)())[10])(); fp3 a;
fp3是一个函数指针,其指向的函数参数为空, 返回值是一个指针,指向长度为10的数组,数组元素是参数列表为空返回值为double类型的函数指针。
复杂的指针结构应如何理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。