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

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

理解函數聲明

2019-11-11 04:30:06
字體:
來源:轉載
供稿:網友
本文內容來自對《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)();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛山市| 乌鲁木齐县| 永丰县| 葵青区| 银川市| 高雄县| 沁水县| 丰宁| 乡城县| 榆树市| 宁明县| 丰宁| 青海省| 名山县| 仁怀市| 鄯善县| 玛多县| 秭归县| 泸溪县| 东阿县| 安国市| 黎平县| 迁安市| 科尔| 祁阳县| 榆树市| 邵阳市| 屯留县| 长汀县| 黄平县| 通渭县| 邢台市| 东海县| 盐城市| 壶关县| 独山县| 额敏县| 凉城县| 丰县| 茶陵县| 乌什县|