c指针阅读

问题提出

请分析此声明:void (*signal(int sig, void (*handler)(int)))(int);

求解过程

在对上面的例子作分析之前,我们需要了解C语言的声明优先级,《C专家编程》P64原文如下:
在这里插入图片描述
在这里插入图片描述

size10:

我们使用以上规则分析void (*signal(int sig, void (*handler)(int)))(int)这个复杂的声明。从易到难的顺序:

1. void (*handler)(int):

① handler右边是圆括号,所以handler不是数组或者函数。再看其左边,是*(星号),所以handler是一个指向****的指针。

② (handler)(int)。(handler)的右边是圆括号,因而(handler)(int)中的()(int)是一个返回的函数。结合上一步分析,handler是一个指向返回***的函数的指针。

③ (*handler)(int)的右边没有符号,左边是void。综上,handler是一个指向返回void值的函数的指针。

2. void (*signal(int sig, void (*handler)(int)))(int):

void (*handler)(int)在上面的步骤已经做了分析,我们可以使用语句typedef void (*handler)(int)将其简化(将handler声明为一个新的类型,这个类型是是一个指向返回void值的函数的指针。有关typedef的知识改日再做分析),则void (*signal(int sig, void (*handler)(int)))(int)就被简化为void (*signal(int sig, handle h))(int)。下面我们对void (*signal(int sig, handle h))(int)作分析:

① signal右边是圆括号,因而signal()是一个返回****的函数。

② signal()的左边是*,因而signal()是一个返回指向****的指针的函数。

③ (signal(int sig, handle h))右边是圆括号,因此(signal(int sig, handle h))(int)是一个返回的函数。综上,signal是一个返回指向返回**函数的指针的函数。

④ (*signal(int sig, handle h))右边是void。因而,signal(这个标识符)是一个返回指向返回void值的函数的指针的函数。

3、int(*((*ptr(int, int))))(int);

int (**ptr(int, int))(int);
一个函数,接受两个int型的参数,返回值为一个指针A,A指向一个指针B,这个指针B指向一个参数为int型、返回值为int型的函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值