gpt4 book ai didi

c - 此表达式中 int 的含义

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:12 25 4
gpt4 key购买 nike

我不明白下面语法中最里面的“int”到底是什么意思。

int(*(*ptr (int))(void)

我对这个表达式的理解是 ptr 是一个函数指针,它的参数不带任何参数(来自表达式的 void 部分)并返回一个 int (来自int 开头)。但是 ptr 之后的 int 是什么意思呢?

编辑: 抱歉,试卷中的问题本身打印错误。这是表达式

int (*ptr (int))(void)

最佳答案

根据 C 标准,signal() 函数具有相当复杂的签名:

void (*signal(int sig, void (*func)(int)))(int);

signal() 函数接受两个参数,一个 int 和一个指向接受 int 参数并返回 的函数的指针>无效;它返回一个指向函数的指针,该函数采用 int 参数并返回 void — 与其第二个参数的类型相同。

这比您的代码更复杂,但可以简化为您的示例,即:

int (*ptr(int))(void);

逐步工作:

void (*signal(int sig, void (*func)(int)))(int);
void (*signal(int sig))(int); // Remove second argument
void (*signal(int))(int); // Remove argument name
int (*signal(int))(int); // Change return type
int (*ptr(int))(int); // Change name of function
int (*ptr(int))(void); // Remove argument of returned pointer to function

因此,在上下文中,这意味着您的语句声明 ptr 是一个接受 int 参数并返回指向不接受任何参数的函数的函数参数并返回一个 int 值。函数的实现(定义)将为内部 int 提供参数名称。

示例代码 — ptr 重命名为 function:

#include <stdio.h>
#include <stdlib.h>

static int counter(void) { static unsigned short val = 0; return ++val; }

static int (*function(int arg))(void)
{
switch (arg)
{
case 0:
return rand;
default:
return counter;
}
}

int main(void)
{
int (*func)(void);

func = function(0);
printf("F() = %5d\n", func());
printf("F() = %5d\n", func());
printf("F() = %5d\n", func());

func = function(1);
printf("F() = %5d\n", (*func)());
printf("F() = %5d\n", (*func)());
printf("F() = %5d\n", (*func)());

return 0;
}

示例输出:

F() = 16807
F() = 282475249
F() = 1622650073
F() = 1
F() = 2
F() = 3

我假设我可以添加 assert(sizeof(unsigned short) != sizeof(int));

关于c - 此表达式中 int 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38939717/

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