久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);

 zwsj 2013-10-21

typedef void (*sighandler_t)(int);

sighandler_t signal(int signum, sighandler_t handler);


此處由于加了typedef自定義了一個(gè)新類型sighandler_t,,所以第二行的函數(shù)原型看起來(lái)順眼多了,形式跟int func(char c, int i)無(wú)異,,但是如果看不懂typedef語(yǔ)句,,這兩句話仍然是噩夢(mèng)。

要理解typedef,,只要記住一句話就差不多了,,那就是:typedef在語(yǔ)句中所起的作用只不過(guò)是把語(yǔ)句原先定義變量的功能變成了定義類型的功能而已。我們只消看幾個(gè)例子立即明白,。

例如語(yǔ)句 typedef int *apple; 理解它的正確步驟是這樣的:先別看typedef,就剩下int *apple; 這個(gè)語(yǔ)句再簡(jiǎn)單不過(guò),,就是聲明了一個(gè)指向整型變量的指針apple (注意:定義只是一種特殊的聲明),,加上typedef之后就解釋成聲明了一種指向整型變量指針的類型apple 

現(xiàn)在,,回過(guò)來(lái)看上面的這個(gè)函數(shù)原型 typedef void (*sighandler_t)(int),,蓋住 typedef不看 ,再簡(jiǎn)單不過(guò),,sighandler_t就是一個(gè)函數(shù)指針,,指向的函數(shù)接受一個(gè)整型參數(shù)并返回一個(gè)無(wú)類型指針 。加上typedef之后sighandler_t就是一種新的類型,,就可以像int一樣地去用它,,不同的是它聲明是一種函數(shù)指針,這種指針指向的函數(shù)接受一個(gè)整型參數(shù)并返回一個(gè)無(wú)類型指針 ,。怎么樣,?簡(jiǎn)單吧。

再來(lái)做一個(gè)更酷的練習(xí),,請(qǐng)看:typedef char *(* c[10])(int **p);

去 掉typedef就變成char *(* c[10])(int **p),,先不管這個(gè)語(yǔ)句有多難看,它一定是聲明了一個(gè)擁有10個(gè)元素的數(shù)組c對(duì)不對(duì),?okay沒什么了不起的,,只不過(guò)這個(gè)數(shù)組c的元素有點(diǎn)特別,它們都 是函數(shù)指針,,并且它們所指向的這些函數(shù)統(tǒng)統(tǒng)都接受一個(gè)二級(jí)指針然后返回一直指向字符型的指針,。加上typedef之后,,c就不是一個(gè)數(shù)組了,而是一種類型 了,,什么類型現(xiàn)在你能說(shuō)出來(lái)了吧,。 ^_^

說(shuō)到typedef就不能不把它跟宏替換比較,typedef相對(duì)于宏替換是一種徹底的“替換”,,#define之所以被稱為宏替換,,是因?yàn)樗褪呛?jiǎn)單地照搬替換字符串。來(lái)看個(gè)例子:

      例1    typedef int x[10];

      例2    #define x int[10]

例1定義了類型x,,此時(shí)我們就可以用它來(lái)定義別的變量了,,比如x y; 此時(shí)y是一個(gè)擁有10個(gè)整型變量的數(shù)組,效果與語(yǔ)句int y[10]無(wú)異,。typedef帶給我們的是一種徹底的封裝 ,。

例2用了宏定義的方式,將來(lái)在該宏的作用域范圍內(nèi)的任何地方遇到的x都將被簡(jiǎn)單地替換成int [10],。

(注意到,,宏替換結(jié)尾是不帶分號(hào)的,不同于typedef語(yǔ)句)

對(duì)于typedef和宏可以有以下總結(jié):

1,、宏定義可以擴(kuò)展,,徹底封裝的typedef不可以。


//以下代碼完全沒問(wèn)題:

#define apple int;

unsigned apple i;

//以下代碼則完全行不通:

typedef int apple;

unsigned apple i;


2,、在連續(xù)聲明幾個(gè)變量的時(shí)候typedef可以完全保證變量是同一種類型,,而宏替換無(wú)法保證。


#define apple int *;

apple a, b;     //a和b類型完全不同,,a是指向整型變量的指針,,b是整型變量。

typedef int *apple;

apple a, b;    //a和b的類型完全相同,,都是指向整型變量的指針,。


永遠(yuǎn)要記住的是,typedef定義的是一種類型而不是變量,,不能指望用它來(lái)定義一個(gè)變量




typedef 定義函數(shù)類型 

最近在看posix實(shí)時(shí)信號(hào)時(shí),,遇到一處函數(shù)是如此定義的:

1 typedef void sigfunc_rt(int, siginfo_t *, void *);

在我常規(guī)理解里,一般定義一個(gè)函數(shù)類型都是這樣定義的:

1 typedef void (*sighandler_t)(int);
2 sighandler_t signal(int signum, sighandler_t handler);

其實(shí)是這樣的,,對(duì)于函數(shù),,typedef有兩類自定義類型:

首先我們要先明白一個(gè)概念,函數(shù)名是不是指針,?也就是說(shuō)一個(gè)函數(shù)名可不可以代表一個(gè)地址,?以及什么是函數(shù)類型?

經(jīng)過(guò)查找,函數(shù)名就是一個(gè)指針,,但是意義是不一樣的,,如同于數(shù)組a[],a和&a其實(shí)都是一樣的,。當(dāng)調(diào)用一個(gè)函數(shù)時(shí),,我們都是直接用函數(shù)名調(diào)用,或者說(shuō)通過(guò)指針調(diào)用,。

函數(shù)類型,,在我理解,就是定義了一個(gè)函數(shù)應(yīng)該返回什么樣的類型,,int,?void?以及它的參數(shù)形式,。

那么:

1,,tpyedef自定義函數(shù)指針類型:

看一個(gè)例子:

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是一個(gè)指向一個(gè)函數(shù)類型(返回的是int,參數(shù)是char)的函數(shù)指針
12  
13     fp = f0;
14     ret = fp('a');通過(guò)函數(shù)指針調(diào)用函數(shù)
15  
16     fp = f1;
17     ret = fp('x');
18     return 0;
19 }

 

 2,,typedef自定義函數(shù)類型:

例子:

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是函數(shù)類型,,所以fp是指向此函數(shù)類型的指針
12  
13     fp = f0;
14     ret = fp('a');
15  
16     fp = f1;
17     ret = fp('x');//函數(shù)指針調(diào)用此函數(shù)
18     return 0;
19 }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多