描述: int (*(*var[3])())(void (*)());
Describe: int (*(*var[3])())(void (*)());
int (*(*var[3])())(void (*)());
你会如何描述上面声明中的 var 类型?
我得到:
将 var 声明为包含 3 个函数指针的数组 (A)
这些函数 (A) 接受任何输入和 return 指向函数的指针 (B)
这些函数 (B) 接受一个指向函数 (C) 的指针和 return int
这些函数 (C) 接受任何输入,return 什么都不接受
这样对吗?
谢谢
从最左边的标识符开始,然后继续前进,记住 ()
和 []
在 *
之前绑定,所以:
T *a[N] // a is an array of pointer to T
T (*a)[N] // a is a pointer to an array of T
T *f() // f is a function returning pointer to T
T (*f)() // f is a pointer to a function returning T
编辑
虽然没有出现在这个声明中,但是const
可以介绍一下自己的皱纹:
T const *p // p is a pointer to constant T
const T *p // same as above
在这两种情况下,p
指向常量 T
。您可以写入 p
(使其指向不同的对象),但您不能写入 *p
(您无法更新 p
指向的对象的值)。
T * const p // p is a constant pointer to T
这将 p
声明为指向 T
的常量指针;您可以写入 *p
(更新 p
指向的值,假设 *p
导致可修改的左值),但您不能写入 p
(您可以'让它指向不同的对象)。
结束编辑
所以
var -- var is a
var[3] -- 3-element array of
*var[3] -- pointer to
(*var[3])() -- function taking
(*var[3])() -- unspecified parameters
*(*var[3])() -- returning pointer to
(*(*var[3])())( ) -- function taking
(*(*var[3])())( ) -- unnamed parameter is a
(*(*var[3])())( * ) -- pointer to
(*(*var[3])())( (*)()) -- function taking
(*(*var[3])())( (*)()) -- unspecified parameters
(*(*var[3])())(void (*)()) -- returning void
int (*(*var[3])())(void (*)()); -- returning int
所以,var
是一个指向函数的指针的 3 元素数组,每个 returns 一个指向另一个函数的指针(它接受一个指向 另一个函数的指针 作为参数)即 returns int
.
int (*(*var[3])())(void (*)());
你会如何描述上面声明中的 var 类型?
我得到:
将 var 声明为包含 3 个函数指针的数组 (A)
这些函数 (A) 接受任何输入和 return 指向函数的指针 (B)
这些函数 (B) 接受一个指向函数 (C) 的指针和 return int
这些函数 (C) 接受任何输入,return 什么都不接受
这样对吗? 谢谢
从最左边的标识符开始,然后继续前进,记住 ()
和 []
在 *
之前绑定,所以:
T *a[N] // a is an array of pointer to T
T (*a)[N] // a is a pointer to an array of T
T *f() // f is a function returning pointer to T
T (*f)() // f is a pointer to a function returning T
编辑
虽然没有出现在这个声明中,但是const
可以介绍一下自己的皱纹:
T const *p // p is a pointer to constant T
const T *p // same as above
在这两种情况下,p
指向常量 T
。您可以写入 p
(使其指向不同的对象),但您不能写入 *p
(您无法更新 p
指向的对象的值)。
T * const p // p is a constant pointer to T
这将 p
声明为指向 T
的常量指针;您可以写入 *p
(更新 p
指向的值,假设 *p
导致可修改的左值),但您不能写入 p
(您可以'让它指向不同的对象)。
结束编辑
所以
var -- var is a
var[3] -- 3-element array of
*var[3] -- pointer to
(*var[3])() -- function taking
(*var[3])() -- unspecified parameters
*(*var[3])() -- returning pointer to
(*(*var[3])())( ) -- function taking
(*(*var[3])())( ) -- unnamed parameter is a
(*(*var[3])())( * ) -- pointer to
(*(*var[3])())( (*)()) -- function taking
(*(*var[3])())( (*)()) -- unspecified parameters
(*(*var[3])())(void (*)()) -- returning void
int (*(*var[3])())(void (*)()); -- returning int
所以,var
是一个指向函数的指针的 3 元素数组,每个 returns 一个指向另一个函数的指针(它接受一个指向 另一个函数的指针 作为参数)即 returns int
.