最近在學習c++發現了乙個問題,當乙個函式作為另乙個函式引數傳入時,引數型別很有意思
void a()
void b(void m())
int main()
說明形參為void m()時,實際上傳入的實參應為void(*)()型別(函式指標),
void(*)()型別代表的是乙個返回值為void的函式,所以實參應傳入乙個函式的位址,而非直接呼叫乙個函式,
函式名(a)即為這個函式的位址,
而函式名加括號(a())意味直接呼叫那個函式,a()代表的是呼叫這個函式後返回的乙個返回值,所以這就相當於乙個物件,其資料型別為函式的返回值型別——void
看到有人說如果想讓函式作為引數傳入形參應寫為函式指標 即
ret_type (*var_name)(arg_list);
表示返回值為ret_type,引數列表為arg_list的函式指標var_name.
例如 void (*p)();
實際上形參寫為void m()是一樣的,都代表實參應傳入函式指標。
C 引用型別作為函式引數時
在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...
C 引用型別作為函式引數時
在 本文的主題之前,先來介紹下c 中的值型別和引用型別 眾所周知c 中有值型別和引用型別,值型別有基礎資料型別 諸如int,double,bool等 結構體 列舉,引用型別有介面 類 委託。值型別全部在作業系統的棧空間中申請,而引用型別則在作業系統的堆空間中建立物件,然後在棧空間中申請乙個指標指向這...
C 結構體型別作為函式引數
將乙個結構體變數中的資料傳遞給另乙個函式,有下列3種方法 用結構體變數名作引數。一般較少用這種方法。用指向結構體變數的指標作實參,將結構體變數的位址傳給形參。用結構體變數的引用變數作函式引數。下面通過乙個簡單的例子來說明,並對它們進行比較。例7.5 有乙個結構體變數stu,內含學生學號 姓名和3門課...