sách gpt4 ai đã đi

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

In lại Tác giả: Space Dog 更新时间:2023-10-29 16:58:19 31 4
mua khóa gpt4 Nike

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

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

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

1 Câu trả lời

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

Vì vậy,

          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

这里要注意的重要一点是你要声明 PBẰNG ... củaMảng ,不是返回 ... 的函数.

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

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

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

每个đồ ăn , thanh , Và bletch将调用传递给它的函数并以某种方式返回指向 gấp đôi 的指针.

您还想定义一个或多个满足每个 đồ ăn 参数类型的函数。 , thanh , Và bletch :

void *blurga() {...}

所以如果你调用đồ ăn直接,你会这样调用它

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

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

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


1 - 区别在于在函数参数声明的上下文中,T a[]T a[N]T *a 相同;在所有三种情况下,Một是一个指向 T 的指针,不是 T 的数组.请注意,这chỉ một在函数参数声明中为真。因此,T *[]sẽ với T ** 相同.

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

31 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com