使用typedef声明新类型及函数指针
一、使用typedef聲明新類型名
C語(yǔ)言支持一種叫做typedef的機(jī)制,它允許你為各種數(shù)據(jù)類型定義新名字。typedef聲明的寫法和普通的聲明基本相同,只是吧typedef這個(gè)關(guān)鍵字出現(xiàn)在聲明的前面。例如,下面這個(gè)聲明:
char?*ptr_to_char;把變量ptr_to_char聲明為一個(gè)指向字符的指針。但是,在你添加關(guān)鍵字typedef后,聲明變?yōu)?#xff1a;
typedef?char?*ptr_to_char;這個(gè)聲明把標(biāo)識(shí)符ptr_to_char作為指向字符的指針類型的新名字。你可以像使用任何預(yù)定義名字一樣在下面的聲明中使用這個(gè)新名字。例如:
ptr_to_char?a;聲明a是一個(gè)指向字符的指針。
使用typedef聲明類型可以減少使聲明變得又臭又長(zhǎng)的危險(xiǎn),尤其時(shí)那些復(fù)雜的聲明。而且,如果你以后覺(jué)得應(yīng)該修改程序所使用的一些數(shù)據(jù)的類型時(shí),修改一個(gè)typedef聲明比修改程序中與這種類型有關(guān)的所有變量(和函數(shù))的所有聲明要容易得多。
【提示】你應(yīng)該使用typedef而不是#define來(lái)創(chuàng)建新的類型名,因?yàn)楹笳邿o(wú)法正確的處理指針類型。例如:#define?d_ptr_to_char?char?*d_ptr_to_char?a,b; 正確地聲明了a,但是b卻被聲明為一個(gè)字符。在定義更為復(fù)雜的類型名字是,如函數(shù)指針或指向數(shù)組的指針,使用typedef更為合適。摘自:《C和指針》(3.3 typedef)
二、使用typedef聲明函數(shù)指針
【形式】:typedef 返回類型(*新類型)(參數(shù)表)
typedef的功能是定義新的類型。第一句就是定義了一種PTRFUN的類型,并定義這種類型為指向某種函數(shù)的指針,這種函數(shù)以一個(gè)int為參數(shù)并返回char類型。后面就可以像使用int,char一樣使用PTRFUN了。
【示例】
#include?<stdio.h> #include?<assert.h>typedef?int?(*FP_CALC)(int,int);//定義一個(gè)函數(shù)指針類型int?add(int?a,?int?b) {return?a?+?b; }int?sub(int?a,?int?b) {return?a?-?b; }int?mul(int?a,?int?b) {return?a?*?b; }int?div(int?a,?int?b) {return?b???a/b?:?-1; }//定義一個(gè)函數(shù),參數(shù)為op,返回一個(gè)指針,該指針類型為擁有兩個(gè)int參數(shù)、 //返回類型為int的函數(shù)指針。它的作用是根據(jù)操作符返回相應(yīng)函數(shù)的地址 FP_CALC?calc_func(char?op) {switch(?op?){case?'+':return?add;case?'-':return?sub;case?'*':return?mul;case?'/':return?div;default:return?NULL;}return?NULL; }//最終用戶直接調(diào)用的函數(shù),該函數(shù)接收兩個(gè)int整數(shù), //和一個(gè)算術(shù)運(yùn)算符,返回兩數(shù)的運(yùn)算結(jié)果 int?calc(int?a,?int?b,?char?op) {FP_CALC?fp?=?calc_func(op);if(fp)return?fp(a,b);elsereturn?-1; }void?main() {int?a?=?100,?b?=?20;printf("calc(%d,?%d,?%c)?=?%d\n",?a,?b,?'+',?calc(a,?b,?'+'));printf("calc(%d,?%d,?%c)?=?%d\n",?a,?b,?'-',?calc(a,?b,?'-'));???printf("calc(%d,?%d,?%c)?=?%d\n",?a,?b,?'*',?calc(a,?b,?'*'));???printf("calc(%d,?%d,?%c)?=?%d\n",?a,?b,?'/',?calc(a,?b,?'/'));? }原文地址:http://blog.csdn.net/qll125596718/article/details/6891881
相關(guān)閱讀:如何設(shè)計(jì)一門語(yǔ)言(一)——什么是坑(a)
*** walker ***
轉(zhuǎn)載于:https://blog.51cto.com/walkerqt/1672870
總結(jié)
以上是生活随笔為你收集整理的使用typedef声明新类型及函数指针的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [老老实实学WCF] 第七篇 会话
- 下一篇: 八.使用OpenCv图像平滑操作