3 回答

TA貢獻(xiàn)1848條經(jīng)驗 獲得超10個贊
這是從C繼承的功能。
在C語言中,之所以允許使用它,主要是因為函數(shù)名稱本身并不意味著什么。您可以使用實(shí)際功能做的就是調(diào)用它。如果您不打電話,唯一可以做的就是獲取地址。由于沒有歧義,因此只要函數(shù)名稱后不帶a (
來表示對該函數(shù)的調(diào)用,該名稱就等于該函數(shù)的地址。
這實(shí)際上與語言的另一部分相似-數(shù)組的名稱計算為該數(shù)組第一個元素的地址,除非在相當(dāng)有限的情況下(用作&
或的操作數(shù)sizeof
)。
由于C允許這樣做,所以C ++也可以這樣做,主要是因為這仍然適用:您只能對函數(shù)進(jìn)行調(diào)用或獲取其地址,因此,如果名稱后面沒有a (
來表示函數(shù)調(diào)用,那么名稱的計算結(jié)果就毫無歧義。

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊
對于數(shù)組,使用address-of運(yùn)算符時沒有指針?biāo)p:
int a[2];
int * p1 = a; // No address-of operator, so type is int*
int (*p2)[2] = &a; // Address-of operator used, so type is int (*)[2]
這是有道理的,因為數(shù)組和指針是不同的類型,例如可以返回對數(shù)組的引用或?qū)⒁脗鬟f給函數(shù)中的數(shù)組。
但是,使用函數(shù),還有其他可能的類型嗎?
void foo(){}
&foo; // #1
foo; // #2
假設(shè)只有#2給出了type void(*)(),那么類型將&foo是什么?沒有其他可能性。
- 3 回答
- 0 關(guān)注
- 496 瀏覽
添加回答
舉報