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

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

理解函數聲明

2019-11-11 05:57:09
字體:
來源:轉載
供稿:網友
本文內容來自對《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)();
上一篇:Classifier

下一篇:Excel VBA 之 UBound

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江口县| 临汾市| 合水县| 富川| 洞头县| 巴彦淖尔市| 特克斯县| 千阳县| 孟津县| 华亭县| 许昌市| 毕节市| 营山县| 洱源县| 宁远县| 武城县| 金沙县| 廉江市| 徐州市| 阜新市| 长岛县| 常山县| 新巴尔虎左旗| 萍乡市| 历史| 清丰县| 页游| 昔阳县| 乳山市| 海原县| 池州市| 德昌县| 高台县| 张家川| 承德市| 洛南县| 嵊州市| 富顺县| 淳安县| 应城市| 蒙城县|