国产探花免费观看_亚洲丰满少妇自慰呻吟_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)();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云梦县| 临高县| 应城市| 斗六市| 金秀| 准格尔旗| 兴文县| 明光市| 武威市| 仙居县| 射洪县| 黑水县| 甘泉县| 古丈县| 高要市| 灵台县| 蓬安县| 锦州市| 渭南市| 绥芬河市| 侯马市| 名山县| 常州市| 合江县| 奎屯市| 开原市| 韶关市| 绿春县| 宜兰市| 根河市| 磐石市| 黄骅市| 苗栗市| 芦山县| 广灵县| 莲花县| 扶沟县| 长垣县| 通河县| 永春县| 长岛县|