c++ primer 函數

int fact(int val)
{
    int ret=1whileval>1)
        ret*=val--;
    return ret;
}

調用函數
int main()
{
int j=fact(5);
cout<<”5! is”<

    int val=5int ret=1whileval>1)
        ret*=val--;
    int j=ret;

形參和實參
實參是形參的初始第二個第一個形參,第二個實參初始化值。第一個實參初始化形參,以此內推。儘管實參和形參存在對應關係,但是並沒有規定實參的求值順序。
實參的類型必須與對應的形參類型匹配,這一點與之前的規則一致的,初始化過程中初始值必須與初始化的類型匹配。
fact函數只有一個int類型的形參,所以每次調用它的時候,都必須提供一個能轉換成int的實參:

    fact(“hello”);
    fact();
    fact(42,10,0);
    fact(3.14);
```類型數量不同都不行,
double可以轉成int
等價於fact(3);

函數的形參列表
函數的形參列表可以爲空,但是不能省略,也可以使用關鍵字void表示函數沒有形參:
void f1(){}
void f2(void){}

列表中形參通常用逗號隔開,其中每個形都含有聲明符的聲明。即使兩個形參類型一樣,也必須把兩個類型寫出來:





<div class="se-preview-section-delimiter"></div>

int f3(int v1){}
int f4(int v1,int v2){};錯誤

任意兩個形參都不能同名,而且函數最外層作用域的局部變量也不能與函數形參一樣的名字


函數的返回類型
大多是類型都能用作函數的返回類型。一種特殊的返回類型是void,它表示函數不返回任何值。函數的返回類型不能是數組類型或函數類型。可以是指向數組或函數的指針。

6.11局部對象
名字有作用域;
對象有生命週期

名字的作用域是程序文本的一部分,名字在其中可見。對象的生命週期是程序執行過程中該對象存在的時間。

函數體是一個語句塊,塊構成一個新的作用域,我們可以在其中定義變量。形參和函數體內部定義的變量統稱局部變量,它們對函數體而言是局部的,僅僅在函數的作用域內可見,同時局部變量還會隱藏。
在所有函數體之外定義的對象存在於程序的整個執行過程中,此類對象在程序中被創建,值得程序結束纔會銷燬。局部變量的生命週期依賴於定義的方式。

自動對象
    對於普通局部變量對應的變量來,當函數的控制路徑經過變量定義語句時被創建,對於定義所在的塊末尾時銷燬它,我們把只存在執行期間的對象被稱爲自動對象。
    形參是一種自動對象。
    我們用傳遞給函數的實參初始化對應的自動對象。對於局部變量的自動對象分爲兩種情況:變量本身含有初始值,就用這個初始值進行初始化,否則,如果變量定義不含有初始值,則執行默認初始化。

局部靜態對象
某些時候,局部變量的生命週期貫穿函數和調用之後的時間,可以講局部變量定義成static類型從而獲得這樣的對象。局部靜態對象在程序執行路徑第一次經過對象定義語句初始化,並且直到程序終止才能被銷燬。在次期間即使對象所在的函數結束執行也不會對它的有影響。








<div class="se-preview-section-delimiter"></div>

size_t count_calls()
{
static size_t ctr=0;
return ++cnt;
}
int main()
{
for(size_t i=0;i!=10;++i)
cout<

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章