第7章 函式 4

2021-06-01 23:48:07 字數 2248 閱讀 4347

7.2.5 傳遞給函式的陣列的處理

非引用陣列形參的型別檢查只是確保實參是和陣列元素具有同樣型別的指標,而不會檢查實參實際上是否指向指定大小的陣列。

任何處理陣列的程式都要確保程式停留在陣列的邊界內。

第一種方法是在陣列本身放置乙個標記來檢測陣列的結束,c風格字串是一種字元陣列,並且以空字元null作為結束的標記。處理c風格字串的程式就是使用這個標記停止陣列元素的處理。

1. 使用標準庫規範

第二種方法是傳遞指向陣列第乙個和最後乙個元素的下乙個位置的指標。

void print(const int *first, const int *end)

}

2. 顯式傳遞表示陣列大小的形參

void print(const int first, const size_t len)

}

7.2.6 main:處理器命令列選項

主函式的實參是可選的,用來確定程式要執行的操作。

第二個形參argv是乙個c風格字串陣列。第乙個形參argc則用於傳遞該陣列中字串的個數。

當將實參傳遞給主函式main時,argv中第乙個字串通常是程式的名字。接下來的元素將額外的可選字串傳遞給主函式main。

7.2.7 含有可變形參的函式

在無法列舉出傳遞給函式的所有實參的型別和數目時,可以使用省略符形參。省略符暫停了型別檢查機制。它們的出現告知編譯器,當呼叫函式時,可以有0或多個實參,而實參的型別未知。

void method1(...){}

void method2(int *i, ...){}

7.3 return語句

return語句用於結束當前正在執行的函式,並將控制權返回給呼叫此函式的函式。

void method1()

int method2()

7.3.1 沒有返回值的函式

不帶返回值的return語句只能用於返回型別為void的函式。在返回型別為void的函式中,return語句返回語句不是必需的,隱式的return發生在函式的最後乙個語句完成時。

一般情況下,返回型別是void的函式使用return語句是為了引起函式的強制結束。

返回型別為void的函式通常不能使用第二種形式的return語句,但是,它可以返回另乙個型別同樣為void的函式的呼叫結果。

7.3.2 具有返回值的函式

return語句的第二種形式提供了函式的結果。任何返回型別不是void的函式都必須返回乙個值,而且這個返回值的型別必須和函式的返回型別相同,或者能隱式轉化為函式的返回型別。

在含有return語句的迴圈後沒有提供return語句是很危險的,因為大部分的編譯器不能檢測出這個漏洞,執行時會出現什麼問題是不確定的。

1. 主函式的main的返回值

允許主函式main沒有返回值就可結束。如果程式控制執行到主函式main的最後乙個語句都還沒有返回,那麼編譯器會隱式地插入返回0的語句。

2. 返回非引用型別

函式的返回值用於初始化在呼叫函式處建立的臨時物件。在求解表示式時,如果需要乙個地方儲存其運算結果,編譯器會建立出乙個沒有命名的物件,這就是臨時物件。

如果返回型別不是引用,在呼叫函式的地方會將函式返回值複製給臨時物件。當函式返回非引用型別時,其返回值既可以是區域性物件,也可以是求解表示式的結果。

3. 返回引用

當函式返回引用型別時,沒有複製返回值。相反,返回的是物件本身。

4. 千萬不要返回區域性物件的引用

理解返回引用至關重要的是:千萬不能返回區域性變數的引用

當函式執行完畢時,將釋放分配給區域性物件的儲存空間。此時,對區域性物件的引用就會指向不確定的記憶體。

5. 引用返回左值

如果不希望引用返回值被修改,返回值應該宣告為const。

const int &method(){}
6. 千萬指向區域性物件的指標

和返回區域性物件的引用一樣,返回指向區域性物件的指標也是錯誤的。一旦函式結束,區域性物件被釋放,返回的指標就變成了指向不再存在的物件的垂懸指標。

7.3.3 遞迴

直接或間接呼叫自己的函式稱為遞迴函式(recursion function).

遞迴函式必須定義乙個終止條件:否則,函式就會「永遠」遞迴下去,這意味著函式會一直呼叫自身直到程式棧耗盡。

主函式main不能呼叫自身。

const int method(int v1, int v2)

第7章 函式 7

7.7 類的成員函式 函式原型必須在類中定義。但是,函式體則既可以在類中也可以在類外定義。7.7.1 定義成員函式的函式體 類的所有成員都必須在類定義的花括號裡面宣告,此後,就不能再為類增加任何成員。類的成員函式必須加宣告的一般定義。類的成員函式既可以在類的定義內也可以在類的定義外定義。編譯器隱式地...

第7章 函式 6

7.5 區域性物件 在函式中定義的形參和變數的名字只位於函式的作用域中 這些名字只在函式體中可見。通常,變數名從宣告或定義的地方開始到包圍它的作用域結束處都是可用的。7.5.1 自動物件 只用當定義它的函式被呼叫時才存在的物件稱為自動物件 automatic object 自動物件在每次呼叫函式時建...

第7章 函式 9

7.7.4 類 檔案的組織 通常將類的宣告放置在標頭檔案中。大多數情況下,在類外定義的成員函式則置於原始檔中。c 程式設計師習慣使用一些簡單的規則給標頭檔案及其關聯的類定義 命名。類定義應置於名為type.h或type.h的檔案中,type指在該檔案中的類的名字。成員函式的定義則一般儲存在與類同名的...