1. 知识点
在 C 或 C++ 语言的语法规则中,对于多重指针的声明,结合顺序是从右向左的。
2. 差异
int *(*ptr) (); // 指向 返回int指针的函数 的函数指针
int (**ptr) (); // 指向 返回int的函数 函数指针的指针
3. 成因
对于 int (*ptr)();
,结合顺序是从右向左。首先,ptr
与最右侧的 *
结合,此时 *ptr
表示 ptr
是一个指针。然后整体表示这个指针指向的是一个返回 int
类型且无参数的函数。
对于 int *(*ptr)();
,同样从右向左结合。ptr
先与最右侧的 *
结合,形成 *ptr
表示 ptr
是一个指针。然后整体看,int *(*ptr)();
表示这个指针指向的是一个无参数且返回 int*
类型(即指向 int
的指针)的函数。
4. 总结(重要)
总结来说,差异在于第一个声明中 ptr
是指向返回 int
类型的函数的指针;第二个声明中 ptr
是指向返回指向 int
的指针的函数的指针。这种结合顺序的差异由 C 或 C++ 语言的语法规则所决定,从而清晰准确地定义了不同的数据类型和指针关系。
5. 小测试
int ** (**ptr) (parameter_list);
是个什么玩意?
答案在这里: 传送门