栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

对sighandler

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对sighandler

最近看到这样一个定义

typedef void (*sighandler_t)(int);

当时没看懂sighandler_t是个啥。

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

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

1.指针函数

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

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

运行结果如下 :

2.函数指针

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

#include
int (*p)(void);
int sum(void)
{
  return 0;
}
int main()
{
  p=sum;
  printf("%dn",*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的类型,用这个类型定义一个变量,这个变量就是一个函数指针变量,后面的理解就很简单了,不用解释了。但是这里需要注意的是如果这个类型定义的是一个函数,那么这个函数的参数没有限制。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925461.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号