不寻常的变量声明

时间:2014-01-12 21:06:47

标签: c++

这是什么意思?

int * (*(*d)())[10];

我认为它可能是指向返回int的函数的10个指针数组的指针。我是对的吗?

3 个答案:

答案 0 :(得分:4)

cdecl.org告诉我们这是:

  

声明d作为指向函数的指针,返回指向int

的指针数组10的指针

如果您遇到困难,我建议您下次使用该网站。

顺便说一下,如果这是您正在使用的实际代码中的声明,就会跑掉

答案 1 :(得分:1)

表示声明,按顺序读取,从右,左,右,左开始。

int *(*(* d)())[10];

d : right of d is empty (coz d enclosed by (), and you cant jump out of ())
  : left of d is *, so d is a pointer
  : right of (*d) is (), so d is a pointer to function
  : left of (*d)() is *, so d is a pointer to function that returns a pointer
  : right of (*(*d)()) is [10], so d is a pointer to function that returns a pointer to array of size 10
  : left of (*(*d)())[10]  is int *, 

所以最后,d是一个指向函数的指针,它返回一个指向10个int指针数组的指针

答案 2 :(得分:0)

问题已经回答,但我想添加一个链接

http://ieng9.ucsd.edu/~cs30x/rt_lt.rule.html

非常好地描述了右 - 左规则来破译任何C声明,无论多么复杂。它易于理解和使用。