目錄
- 一、函數的概念
- 二、調用函數的兩個前提
- 三、函數傳參的三種形式
- 四、函數返回類型
一、函數的概念
函數是C++程序的基本模塊,通常一個C++程序由一個或多個函數組成。函數可以完成用戶指定的任務,一般分為庫函數和用戶自定義的函數。函數由函數頭和函數體組成,函數頭中包含了函數的函數名、返回類型和參數列表,函數體則描述了函數執行任務的過程和結果。
二、調用函數的兩個前提
首先需要函數聲明,編譯器需要根據函數聲明來判斷調用函數的使用是否正確。其次需要函數定義,編譯器判斷調用函數的使用無誤之后,會停止當前函數的運行,進入被調函數的定義執行被調函數,然后返回原函數繼續往下執行。
三、函數傳參的三種形式
在C++中函數有三種傳參方式:值傳遞、指針傳遞和引用傳遞。
1. 值傳遞
值傳遞時,形參的改變不會影響實參。因為形參和實參是兩個變量,它們都有自己的內存空間,只是存儲的值相同。
2. 指針傳遞
指針傳遞時,形參的改變可以影響實參。雖然形參和實參依舊是兩個變量,但是形參存儲了實參的地址,指向實參,可以通過解引用運算符(*)對實參的值進行修改。如果不想讓實參被改變,可以添加const限定符。
3. 引用傳遞
引用傳遞時,形參的改變一定影響實參。因為實參和形參是一個變量,形參只是實參的別名。如果不想讓形參改變,可以添加const限定符。
下面通過一個交換兩個數的代碼,來對上面三種形式做出直觀的說明:
// 函數聲明
void Swap1(int a, int b); // 值傳遞
void Swap2(int* a, int* b); // 指針傳遞
void Swap3(int& a, int& b); // 引用傳遞int main()
{int a = 10, b = 5;// 交換a和bSwap1(a, b);cout << "值傳遞: " << "a = " << a << ", b = " << b << endl;Swap2(&a, &b);cout << "指針傳遞: " << "a = " << a << ", b = " << b << endl;Swap3(a, b);cout << "引用傳遞: " << "a = " << a << ", b = " << b << endl;return 0;
}// 函數定義
void Swap1(int a, int b) // 值傳遞
{int temp = b;b = a;a = temp;
}
void Swap2(int* a, int* b) // 指針傳遞
{int temp = *b;*b = *a;*a = temp;
}
void Swap3(int& a, int& b) // 引用傳遞
{int temp = b;b = a;a = temp;
}
運行結果如下:
可以看到值傳遞并沒有交換a和b,因為它只是交換了a和b的副本。指針傳遞通過解引用操作找到了原函數的a和b然后進行交換。引用傳遞使用的就是原函數的a和b本身。這里點到為止,只需要知道函數有三種傳參方法和如何使用這三種方法就可以了。
四、函數返回類型
作者認為函數返回類型可以分為四種:無返回(void)、返回值、返回指針和返回引用。
無返回類型就是調用函數結束沒有返回值給原函數。而返回值是返回被調函數中變量的臨時拷貝,使用完后丟棄。返回指針和引用可以在原函數中使用被調函數的變量。注意: 不能返回被調函數中定義的局部變量的指針或引用,函數調用結束后,該變量被銷毀,其內存空間被操作系統回收。如果通過返回的指針或引用去訪問這塊空間,會造成非法訪問。