对sighandler_t类型的理解

最近看到这样一个定义

typedef void (*sighandler_t)(int);

当时没看懂sighandler_t是个啥。

函数指针和指针函数的区别:

区别两者的第一步就是判断谁是主体。指针函数的主体是函数,函数指针的主体是指针。

1.指针函数

        这个比较简单,主体是函数,该函数的返回值是一个指针,这样的函数就是指针函数。示例代码如下:

#include<stdio.h>
int *fun(int a)
{
  int *ap=&a;
  return ap;
}
int main()
{
  int a=1;
  printf("%d",fun(a));
  return 0;
 }

运行结果如下 :

2.函数指针

        函数指针的主体是一个指针,该指针指向一个函数的首地址。示例代码如下:

#include<stdio.h>
int (*p)(void);
int sum(void)
{
  return 0;
}
int main()
{
  p=sum;
  printf("%d\n",*p);
  printf("%d",sum); 
  return 0;
}

 运行结果如下:

        这里解释一下第二行:  int (*p)(void);

        先说一下优先级,c语言中()和[]的优先级一样高,*的优先级其次。那么p就是我定义的一个int类型指针,这个指针指向一个函数的首地址。函数的类型和指针的类型保持一致,都为int类型。函数的参数为void类型。显然sum()函数就是该函数。让p=sum;就能使p指向sum()函数的首地址。

        最开始的问题我们已经解决了一半了。void (*sighandler_t)(int);的意思就是定义了一个sighandler_t的指针,指针的类型为void,该指针指向一个函数的首地址,该函数的参数为int,函数的类型为void。

        理解了指针函数和函数指针后,理解指针数组和数组指针就容易多了。比如: int  (*a[10])[20]的意思就是定义了一个数组a,数组a有十个元素,这十个元素每一个都是一个int型的指针,且每一个指针都指向一个int类型的有20个元素的一维数组的首地址。

        现在加上typedef也不难理解。typedef的作用就是自定义一种类型。比如typedef  int  a就是定义了类型a,a的类型为int 类型。

        那么现在就能解决我们刚开始的问题。typedef void (*sighandler_t)(int);的意思就是定义了一个sighandler_t的类型,用这个类型定义一个变量,这个变量就是一个函数指针变量,后面的理解就很简单了,不用解释了。但是这里需要注意的是如果这个类型定义的是一个函数,那么这个函数的参数没有限制。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值