gpt4 book ai didi

c - N 个指向函数的指针的数组返回指向函数的指针

转载 作者:太空狗 更新时间:2023-10-29 16:31:31 26 4
gpt4 key购买 nike

这是在采访中问我的!我真的很困惑

  • 如何声明一个 N 数组指向函数返回的指针指向函数返回的指针指向字符的指针

有人可以帮忙吗?

最佳答案

Typedef 是给胆小鬼用的。这是一个简单的、机械的方法来找出毛茸茸的声明:

          a                 -- a
a[N] -- is an N-element array
*a[N] -- of pointers
(*a[N])() -- to functions
*(*a[N])() -- returning pointers
(*(*a[N])())() -- to functions
*(*(*a[N])())() -- returning pointers
char *(*(*a[N])())() -- to char.

所以,答案就在 char *(*(*a[N])())(); 附近。我说“在附近”是因为它从未指定函数采用的参数。

这是一个令人讨厌的面试问题(这种难看的类型在 IME 中确实很少见),但它确实让面试官了解你对声明符的理解程度。要么就是他们很无聊,只是想看看他们是否能让你的大脑停止运转。

编辑

大多数人都推荐使用 typedef。我唯一推荐使用 typedef 的情况是类型是真正不透明的(即,不是由程序员直接操作,而是传递给 API,有点像 FILE 类型)。否则,如果程序员打算直接操作该类型的对象,那么 IME 最好在声明中提供所有可用信息,尽管它可能很丑陋。例如,类似

 NameFuncPickerPointer a[N];

没有给我关于如何实际使用 a[i] 的信息。我不知道 a[i] 是可调用的,或者它返回什么,或者它应该采用什么参数(如果有的话),或者其他任何东西。我必须去寻找 typedef

typedef char *NameFunc();
typedef NameFunc *NameFuncPicker();
typedef NameFuncPicker *NameFuncPickerPointer;

然后从这个谜题中找出如何编写实际调用其中一个函数的表达式。而使用“裸”、非类型定义的声明,我立即知道调用的结构是

char *theName = (*(*a[i])())();

关于c - N 个指向函数的指针的数组返回指向函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com