gpt4 book ai didi

c - double* (*p[3]) (void* (*)()); 是什么意思?意思?

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

我很难理解以下声明的含义。这个申报标准吗?

double* (*p[3]) (void* (*)());

谁能帮我理解这个声明的意思?

最佳答案

阅读复杂声明的规则:找到最左边的标识符并向外工作,记住 ()[]* 之前绑定(bind), 所以 T *a[N]是指向 T 的指针数组, T (*a)[N]是指向 T 数组的指针, T *f()是一个返回指向 T 指针的函数, 和 T (*f)()是指向返回 T 的函数的指针。由于函数原型(prototype)可能会省略参数名称,因此您可能会看到类似 T *[N] 的内容或 T (*)() .意思大体相同1,只是假装有一个长度为0的标识符。

因此,

          p                      -- p
p[3] -- is a 3-element array
*p[3] -- of pointers
(*p[3]) ( ) -- to functions
(*p[3]) ( (*)()) -- taking a pointer to a function
(*p[3]) ( * (*)()) -- returning a pointer
(*p[3]) (void* (*)()) -- to void
* (*p[3]) (void* (*)()) -- returning a pointer
double* (*p[3]) (void* (*)()); -- to double

这里要注意的重要一点是你要声明 p作为 ...数组 ,不是返回 ... 的函数.

这样的野兽在实践中会是什么样子?那么,首先,您需要指向三个函数。这些函数中的每一个都接受一个参数,它是一个指向函数的指针,该函数返回一个指向 void 的指针:

double *foo(void *(*)());
double *bar(void *(*)());
double *bletch(void *(*)());

double *(*p[3]) (void *(*)()) = {foo, bar, bletch};

每个foo , bar , 和 bletch将调用传递给它的函数并以某种方式返回指向 double 的指针.

您还想定义一个或多个满足每个 foo 参数类型的函数。 , bar , 和 bletch :

void *blurga() {...}

所以如果你调用foo直接,你会这样调用它

double *pv;
...
pv = foo(blurga);

所以我们可以想象这样的调用

double *pv = (*p[0])(blurga);


1 - 区别在于在函数参数声明的上下文中,T a[]T a[N]T *a 相同;在所有三种情况下,a是一个指向 T 的指针,不是 T 的数组.请注意,这在函数参数声明中为真。因此,T *[]将与 T ** 相同.

关于c - double* (*p[3]) (void* (*)()); 是什么意思?意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10914897/

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