使用typedef声明新类型及函数指针
一、使用typedef聲明新類型名
C語言支持一種叫做typedef的機制,它允許你為各種數據類型定義新名字。typedef聲明的寫法和普通的聲明基本相同,只是吧typedef這個關鍵字出現在聲明的前面。例如,下面這個聲明:
char?*ptr_to_char;把變量ptr_to_char聲明為一個指向字符的指針。但是,在你添加關鍵字typedef后,聲明變為:
typedef?char?*ptr_to_char;這個聲明把標識符ptr_to_char作為指向字符的指針類型的新名字。你可以像使用任何預定義名字一樣在下面的聲明中使用這個新名字。例如:
ptr_to_char?a;聲明a是一個指向字符的指針。
使用typedef聲明類型可以減少使聲明變得又臭又長的危險,尤其時那些復雜的聲明。而且,如果你以后覺得應該修改程序所使用的一些數據的類型時,修改一個typedef聲明比修改程序中與這種類型有關的所有變量(和函數)的所有聲明要容易得多。
【提示】你應該使用typedef而不是#define來創建新的類型名,因為后者無法正確的處理指針類型。例如:#define?d_ptr_to_char?char?*d_ptr_to_char?a,b; 正確地聲明了a,但是b卻被聲明為一個字符。在定義更為復雜的類型名字是,如函數指針或指向數組的指針,使用typedef更為合適。摘自:《C和指針》(3.3 typedef)
二、使用typedef聲明函數指針
【形式】:typedef 返回類型(*新類型)(參數表)
typedef的功能是定義新的類型。第一句就是定義了一種PTRFUN的類型,并定義這種類型為指向某種函數的指針,這種函數以一個int為參數并返回char類型。后面就可以像使用int,char一樣使用PTRFUN了。
【示例】
#include?<stdio.h> #include?<assert.h>typedef?int?(*FP_CALC)(int,int);//定義一個函數指針類型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; }//定義一個函數,參數為op,返回一個指針,該指針類型為擁有兩個int參數、 //返回類型為int的函數指針。它的作用是根據操作符返回相應函數的地址 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; }//最終用戶直接調用的函數,該函數接收兩個int整數, //和一個算術運算符,返回兩數的運算結果 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
相關閱讀:如何設計一門語言(一)——什么是坑(a)
*** walker ***
轉載于:https://blog.51cto.com/walkerqt/1672870
總結
以上是生活随笔為你收集整理的使用typedef声明新类型及函数指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [老老实实学WCF] 第七篇 会话
- 下一篇: 八.使用OpenCv图像平滑操作