7_R*_*R3X 1 c pointers function
我无法理解以下语法中最内层的"int"究竟是什么意思.
int(*(*ptr (int))(void)
Run Code Online (Sandbox Code Playgroud)
我对这个表达式的理解说,这ptr
是一个函数指针,它的参数(从表达式的void部分)不带任何内容,并返回一个int
(从头int
开始).但到底是什么在int
后ptr
的意思吗?
编辑:道歉,但问题文件本身的问题被错误印刷.这是表达式
int (*ptr (int))(void)
Run Code Online (Sandbox Code Playgroud)
从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));
.