如何声明一个指向函数的指针,该函数返回一个指向C/C++中int值数组的指针?

Rus*_*sel 9 c c++ arrays function-pointers declaration

它是否正确?

int (*(*ptr)())[];
Run Code Online (Sandbox Code Playgroud)

我知道这是微不足道的,但我正在看一个关于这种结构的旧测试,而这个特殊的组合并没有在测试中,它真的让我发疯; 我只需要确定一下.这些声明是否有明确而可靠的可理解规则?(即:指向......数组的指针......指向......等等的函数)谢谢!

[R

Pra*_*rav 14

左右规则使其变得简单.

int (*(*ptr)())[];可以解释为

从变量名称开始------------------------------- ptr

没有什么是正确的,但)所以去找*-------------- 是一个指针

跳出括号并遇到()----------- 到一个不带参数的函数(在C未指定参数的情况下)

向左走,找*---------------------------------------------- - 并返回一个指针

跳转括号,右键并将[]---------- 命中为数组

再往左走,找int------------------------------------- ints.

  • 这没什么好容易的.我喜欢使用typedef来分解它. (3认同)
  • @caf:它使类型为不完整类型,但您仍然可以在声明中使用指向不完整类型的指针. (2认同)

CB *_*ley 6

在几乎所有想要返回指向数组的指针的情况下,最简单的方法是返回指向数组第一个元素的指针.这个指针可以在与数组名相同的上下文中使用,它提供的间接不比返回"指向数组的指针"类型的指针更多或更少,实际上它将保持相同的指针值.

如果你遵循这个你想要一个指向函数的指针返回一个指针int.你可以构建它(声明的构造比解析更容易).

指针int:

int *A;
Run Code Online (Sandbox Code Playgroud)

函数返回指针int:

int *fn();
Run Code Online (Sandbox Code Playgroud)

函数返回指针的指针int:

int *(*pfn)();
Run Code Online (Sandbox Code Playgroud)

如果你真的想要返回一个指向函数的指针,返回一个指向数组的指针,int你可以遵循相同的过程.

int数组:

int A[];
Run Code Online (Sandbox Code Playgroud)

指向int数组的指针:

int (*p)[];
Run Code Online (Sandbox Code Playgroud)

函数返回指针...:

int (*fn())[];
Run Code Online (Sandbox Code Playgroud)

指向fn的指针...:

int (*(*pfn)())[];
Run Code Online (Sandbox Code Playgroud)

这就是你拥有的.