int表达式中int的含义

7_R*_*R3X 1 c pointers function

我无法理解以下语法中最内层的"int"究竟是什么意思.

int(*(*ptr (int))(void)
Run Code Online (Sandbox Code Playgroud)

我对这个表达式的理解说,这ptr是一个函数指针,它的参数(从表达式的void部分)不带任何内容,并返回一个int(从头int开始).但到底是什么在intptr的意思吗?

编辑:道歉,但问题文件本身的问题被错误印刷.这是表达式

int (*ptr (int))(void)
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 5

从C标准来看,该signal()函数具有相当复杂的签名:

void (*signal(int sig, void (*func)(int)))(int);
Run Code Online (Sandbox Code Playgroud)

signal()函数接受两个参数,一个int和一个指向函数的指针,该函数接受一个int参数并返回void; 它返回一个指向函数的指针,该函数接受一个int参数并返回void- 与第二个参数相同的类型.

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

int (*ptr(int))(void);
Run Code Online (Sandbox Code Playgroud)

一步一步地工作:

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
Run Code Online (Sandbox Code Playgroud)

因此,在上下文中,它意味着您的语句是一个声明,它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;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

F() = 16807
F() = 282475249
F() = 1622650073
F() =     1
F() =     2
F() =     3
Run Code Online (Sandbox Code Playgroud)

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