程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> typedef定義函數類型

typedef定義函數類型

編輯:C++入門知識

最近在看posix實時信號時,遇到一處函數是如此定義的:

1
typedef void sigfunc_rt(int, siginfo_t *, void *);
在我常規理解裡,一般定義一個函數類型都是這樣定義的:
1
typedef void (*sighandler_t)(int);
2
sighandler_t signal(int signum, sighandler_t handler);
其實是這樣的,對於函數,typedef有兩類自定義類型:
首先我們要先明白一個概念,函數名是不是指針?也就是說一個函數名可不可以代表一個地址?以及什麼是函數類型?

經過查找,函數名就是一個指針,但是意義是不一樣的,如同於數組a[],a和&a其實都是一樣的。當調用一個函數時,我們都是直接用函數名調用,或者說通過指針調用。

函數類型,在我理解,就是定義了一個函數返回值類型以及參數類型。

那麼:

1,tpyedef自定義函數指針類型:

看一個例子:

01
#include <stdio.h>
02
 
03
typedef int (*fp_t)(char c);
04
 
05
int f0(char c) { printf("f0, c = %c\n", c); return 0;}
06
int f1(char c) { printf("f1, c = %c\n", c); return 1;}
07
 
08
int main()
09
{
10
    int ret;
11
    fp_t fp;//fp是一個指向一個函數類型(返回的是int,參數是char)的函數指針
12
 
13
    fp = f0;
14
    ret = fp('a');通過函數指針調用函數
15
 
16
    fp = f1;
17
    ret = fp('x');
18
    return 0;
19
}
 

 2,typedef自定義函數類型:

例子:


01
#include <stdio.h>
02
 
03
typedef int f_t(char c);
04
 
05
int f0(char c) { printf("f0, c = %c\n", c); return 0;}
06
int f1(char c) { printf("f1, c = %c\n", c); return 1;}
07
 
08
int main()
09
{
10
    int ret;
11
    f_t *fp;//f_t是函數類型,所以fp是指向此函數類型的指針
12
 
13
    fp = f0;
14
    ret = fp('a');
15
 
16 www.2cto.com
    fp = f1;
17
    ret = fp('x');//函數指針調用此函數
18
    return 0;
19
}


作者:weiqubo

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved