日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用typedef声明新类型及函数指针

發(fā)布時(shí)間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用typedef声明新类型及函数指针 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、使用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?char?(*PTRFUN)(int);? PTRFUN?pFun;? char?glFun(int?a){?return;}? void?main()? {?pFun?=?glFun;?(*pFun)(2);? }

  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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。