1. 函數由類型 (返回值 (參數列表))聲明,該類型原理和類類型是一樣的。int func(int i); 其中函數名爲func,等同於常量變量名。func有地址分配。函數定義時有{}註明,函數中代碼存入func地址。(這裏()不是函數調用操作符,僅是一個函數聲明表示,類似於class)。
當函數調用時按函數名+函數調用操作符() + 參數調用。這裏面函數操作符(和上面函數標識不一個概念)就是一個內置函數(所有的操作符都是一個內置函數),函數調用操作調用函數代碼,並傳入參數執行。
2. 變量和函數在使用之前一定先有定義。如:
void func();
typedef void (*Func)();
Func func1 = func;
void func(){}
如果沒有最後一行就會出現錯誤,注意:對於變量和函數可以先聲明,定義在使用的後面,編譯器會自動在其作用域中尋找定義。如在extern關鍵字的作用域,static關鍵字的作用域。但是對於類型來說,定義一定在使用之前。如:
class A;
A a;
class A
{};
這樣會出現錯誤(類型不能用extern,static atuo等修飾,編譯是從前到後,不會自動按作用域尋找定義)。但是:
class A;
A *a;
class A
{};
這樣是可以的,因爲A *a;並沒有用到A的定義,a是一個指針四字節。