IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

Hi,歡迎來到嵌入式培訓(xùn)高端品牌 - 華清遠(yuǎn)見教育科技集團(tuán)<北京總部官網(wǎng)>,專注嵌入式工程師培養(yǎng)15年!
當(dāng)前位置: > 華清遠(yuǎn)見教育科技集團(tuán) > 嵌入式學(xué)習(xí) > 講師博文 > C語言聲明學(xué)習(xí)之中級篇
C語言聲明學(xué)習(xí)之中級篇
時間:2016-12-29作者:華清遠(yuǎn)見

C語言的聲明存在的大的問題就是你無法以一種人們所習(xí)慣的自然方式從左到右閱讀一個聲明,程序員必須記住特殊的規(guī)則才能推斷出int *p[3]到底是一個int類型的指針數(shù)組還是一個指向int數(shù)組的指針。(如果你對此還有疑惑的話,建議你去讀一讀《C專家編程》的第三章:“分析C語言的聲明”)

對于這樣一個聲明,我們應(yīng)該如何分析?

——————int f()[];

首先,f是一個函數(shù),其次,它的返回值是一個整型數(shù)組。貌似就是這樣啊,但實際上,這個例子隱藏著一個陷阱,因為這個聲明是非法的,呵呵,在我們的C語言里,函數(shù)只能返回變量值,不能返回數(shù)組。

還有一個讓人頗費腦筋的聲明:

——————int f[] ();

這里,f應(yīng)該是一個數(shù)組,數(shù)組的元素類型是返回值為整型的函數(shù)。請不要對它看似正確的表面所迷惑,其實這個聲明也是非法的!因為數(shù)組元素必須具有相同的長度,但是不同的函數(shù)顯然可能具有不同的長度吧,呵呵。
在被C語言迷幻的聲明形式欺騙兩次之后,現(xiàn)在是不是有些草木皆兵了?讓我們乘熱打鐵,再看一個聲明:

——————int (*f[]) ();

請你分析一下它的含義?首先,你能否確定它是對的還是錯的?

首先,我們必須找到所有的操作符,然后按照正確的次序執(zhí)行它們。這里有兩對括號,它們分別具有不同的含義。第一個括號內(nèi)的表達(dá)式*f[]首先進(jìn)行求值,所以f是一個元素為某種類型的指針的數(shù)組;末尾的括號是函數(shù)調(diào)用操作符,所以我們可以肯定f是一個數(shù)組,數(shù)組元素的類型是函數(shù)指針,它所指向的函數(shù)的返回值是一個整型值。

清楚了上面這個聲明,下面這個聲明應(yīng)該就比較容易分析了:

——————int *(*f[ ]) ( );

這個聲明創(chuàng)建了一個指針數(shù)組,指針?biāo)赶虻念愋褪欠祷刂禐檎椭羔樀暮瘮?shù)。

ANSI C推薦我們使用完整的函數(shù)原型,使聲明更為明確,例如:

int (*f) ( int, float );
        int *(*g[]) ( int, float );

前者把f聲明為一個函數(shù)指針,它所指向的函數(shù)接受兩個參數(shù),分別是一個整型數(shù)和浮點型值,并返回一個整數(shù)。

后者把g聲明為一個數(shù)組,數(shù)組的元素類型是一個函數(shù)指針,它所指向的函數(shù)接受兩個參數(shù),分別是一個整型數(shù)和浮點型值,并返回一個整型指針。盡管原型增加了聲明的復(fù)雜度,但是ANSI C還是大力提倡這個風(fēng)格,因為這樣可以向編譯器提供一些額外的信息。

在中級篇的后,給大家推薦一個實用的C語言工具:cdecl,這個程序可用于所有UNIX操作系統(tǒng),它可以將C語言的聲明翻譯成通俗易懂的語言,并可以將C語言聲明的語法轉(zhuǎn)換成為具體的C語言聲明。

如果你是用的是ubuntu操作系統(tǒng),那么你只需要執(zhí)行sudo apt-get install cdecl就可以把cdecl工具安裝到你的計算機(jī)上,對于別的unix操作系統(tǒng),你同樣可以下載源碼包安裝(comp.sources.unix.newsgroup)。

在shell終端,我們執(zhí)行cdecl就可以進(jìn)入cdecl>提示符,然后輸入:explain int (*(*f)())[10]; 可以得到:

可以看到,cdecl為我們解釋了int (*(*f)()) [10]這個聲明的含義,有了這個工具,不管我們遇到怎樣詭異的C語言聲明,都可以從容應(yīng)對了吧,呵呵!

當(dāng)然,我們可以給cdecl一個聲明的語法,把上面一段解釋輸入進(jìn)去,就可以看到:

可見,cdecl又幫我們把這段通俗的解釋轉(zhuǎn)換成為專業(yè)的C語言的聲明。

怎么樣,這個工具是不是很好用,如果你的系統(tǒng)里面還沒有這個工具的話,你是不是應(yīng)該趕快安裝一個呢?讓它成為你學(xué)習(xí)C語言的好幫手吧。好了,今天關(guān)于C語言聲明的中級篇就到此為止,讓我們高級篇見!

發(fā)表評論
評論列表(網(wǎng)友評論僅供網(wǎng)友表達(dá)個人看法,并不表明本站同意其觀點或證實其描述)
主站蜘蛛池模板: 文君阁-提供生活百科,日常生活健康小常识,生活小窍门,百科知识大全 | 西安泰富西玛电机有限公司总部-电机-高压电机-西玛电机-西安西玛电机-泰富西玛电机-西安电机厂-西玛电机销售 | 津成电线电缆价格,天津津成线缆,津成线缆销售电话,天津津成线缆批发电话-天津市津成电线电缆有限公司 | 耐力板厂家_pc耐力板价格_透明耐力板批发-佛山市麦粒建材有限公司 | 强德防盗门-防盗门厂家-中国防盗门十大品牌-强德门业 - 浙江臻品工贸有限公司 | 水表_智能电表_抄表软件_ic卡水控机_电磁水表厂家-深圳市华熙仪数码科技有限公司 | 氢能-燃料电池-电堆-中国氢能与燃料电池网企业最佳宣传推广平台 轻质隔墙板厂家-加气隔墙板_grc轻质隔墙板_空心实心复合隔墙板_水泥混凝土轻质隔墙板批发价格 | 青岛抛丸机_抛丸清理机_树脂砂设备_除尘设备 | 医疗器械招标网—打造医械厂家专业服务平台 | 金属雕花板厂家_外墙保温板_专业生产批发_山东百菲特 | 陶瓷复合钢管-专业提供江苏陶瓷钢管和陶瓷内衬复合钢管的生产厂家 | 箱式电炉,箱式烧结炉,箱式马弗炉,箱式实验炉,高温箱式电阻炉,箱式加热炉,箱式退火炉,箱式真空气氛炉洛阳研博炉业有限公司 | 主题公园设计|主题公园规划|水上乐园设计|龙翔设计|龙翔景观|龙翔文旅|深圳市龙翔设计景观工程有限公司 | 上海钧尚电器有限公司 - Faulhaber电机 AMETEK pittman电机 AMETEK ROTRON军用航空风机 Exlar电动缸 MAE电机 MCG电机 CP电动工具 马头工具 AMCI驱动器 直流电机 减速箱 直流伺服电机,无刷电机,直线电机 直流防爆电机 防爆电机 汽车助力转向电机 EPS电机 faulhaber motor faulhaber gearbox NANOTEC电机 ELWOOD电机 PHYTRON电机 EXLAR伺服电动缸 高力矩、高性能直流电机,音圈电机,风机,直流风机,航空风机 | 纸带过滤机,磁性分离器,排屑器-烟台通赫机床辅机有限公司 | 危废处理_危废处置_危废处理公司-江苏绿瑞特环境科技股份有限公司 | 住友套管总代理-日本住友套管-住友热缩管-上海弘奇电子科技有限公司 | 天象文仪办公家具,25年一站式配齐经验厂家-办公家具官网 | 全自动|电加热配液罐,浓缩器厂家-森博百科| 人民交通网-人民交通杂志官网 | 陕西锐锋建筑安装有限公司,锐锋建筑,总承包,专业分包,市政综合,劳务,水电钢构,铁路公路,房建,房屋建筑施工 | 洗车机-自动汽车洗车机-全自动洗车设备-全自动电脑洗车机-北京自然绿环境科技发展有限公司 | 网站建设|外贸网站建设|做网站公司-济南超越互联-推荐 | 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 | 深圳办公室装修_办公室设计_写字楼装修设计_深圳市加洲建设集团有限公司 | 饮料制造机械设备-罐体设备报价-CIP清洗设备-饮料生产线交钥匙工程-上海哲苏轻工机械有限公司 | 上海五相仪器仪表有限公司-鼓风干燥箱-拍击式无菌均质器生产厂家 | 河卵石制砂机|鹅卵石制砂机-移动制砂机-制砂设备-郑州秦星机械设备有限公司 | 狠狠穞A片一區二區三區-免费网站在线观看人数更新时间-欧洲尺码日本尺码专线不卡顿,国产大尺度禁片未删减版,baomaav | 自动超声波清洗机_五金超声波清洗机厂家_超声波模具价格_东莞劲荣自动化 | 围挡厂家_施工围挡_PVC围挡_建筑工程围挡_深圳市旭东钢构技术开发有限公司【官网】 | 精馏塔_甲醇回收塔_糠醛塔-无锡弘鼎华化工设备有限公司 | 青岛除甲醛公司|青岛甲醛治理|青岛除甲醛|甲醛检测|光触媒除甲醛|装修除味除甲醛|新房除甲醛|青岛室内环境污染检测治理|青岛闪洁环保科技有限公司官网 | 液压油缸_液压系统_液压泵站生产厂家-浙江汉达机械专注液压行业21年 | 气泡式洗菜机-气泡喷淋清洗机-喷淋清洗风干线-诸城市迪凯工业装备有限公司 | 烟台真空包装,烟台木包装,烟台熏蒸木箱-烟台福岭木制品有限公司 烟台通风管道,烟台风机风管,烟台风阀-烟台福莱通风设备有限公司 | 卡压式管件_不锈钢卡压式管件_双卡压管件_不锈钢沟槽管件_承插焊管件_温州市中达阀门管件有限公司 | 移动CRM软件_SaaS CRM_crm管理软件系统_crm客户关系管理系统_销售管理软件-上海企能软件科技有限公司 | 滑动轴承_无油自润滑轴承_复合干式_含油铜套_石墨铜套-嘉善盛元自润滑轴承厂 | 真空机器人维修_晶圆机械手保养_半导体机械臂维修_面板机器人保养_AMHS改造-广州市广科智能技术有限公司 | 桁架楼承板_钢筋桁架楼承板厂家-山东新材料科技|