国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

理解函數聲明

2019-11-11 05:08:12
字體:
來源:轉載
供稿:網友
本文內容來自對《C陷阱與缺陷》第2.1節的理解,并沿用了此章節的題目。對于程序員來說,理解下面這樣的聲明是件讓人頭疼的事:(*(void(*)())0)();想要理解上述聲明的含義需明白一條原則:按照使用的方式來聲明。首先要理解C變量聲明的含義,例如float f,g;上面的聲明由類型float 和聲明符f和g組成,意思為對f和g求值時將返回一個float類型的結果。同理,聲明 float ff()的意義為對ff()求值將得到一個float類型的結果,即ff為一個返回值為float類型數據的函數。同理,聲明 float *pf的意義為對*pf求值將得到一個float類型的結果,即fp為只想float類型的數據的指針。同理,聲明 float *g()的意義為對*g()求值將得到一個float類型的結果,即g()將返回一個float類型的指針,即g為一個返回值為float類型指針的函數。同理,聲明 float (*h)()的意義為對(*h)()求值將得到一個float類型的結果,即h是一個函數指針,所指向的函數的返回值類型為float。其次,要知道如何定義輕質類型轉換符:把聲明中的變量名和生命末尾的分號去掉,同時將剩余的部分用一個大括號括起來就行了(高,實在是高啊)。例如,float (*h)()為指向返回值為float類型的函數的指針,而(float (*)())就是指向返回值為float類型的函數的指針的強制類型轉換符了。現在來分析下(*(void(*)())0)()的含義。(void(*)())當然是void(*h)()的強制類型轉換符,那么,(void(*)())就是將0轉換為一個函數指針,這個函數指針存儲的地址為0,那么(*(void(*)())0)()就是調用地址為0處的函數。哈哈,一切是那么自然而然。當然,若用typedef來定義函數指針類型將帶來更加直觀的感受。typedef void (*funcptr)();(*(funcptr)0)();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤壁市| 白朗县| 固始县| 宝丰县| 遵化市| 阳西县| 肥西县| 昌江| 常山县| 玛沁县| 孝感市| 同德县| 务川| 林周县| 越西县| 沧州市| 北辰区| 天峻县| 龙江县| 霞浦县| 苏尼特右旗| 湖南省| 陆丰市| 棋牌| 无极县| 浑源县| 宁波市| 那曲县| 鄂尔多斯市| 建阳市| 丁青县| 安多县| 达州市| 富源县| 宣汉县| 清涧县| 饶阳县| 荣昌县| 石首市| 丹棱县| 怀柔区|