1. 程式人生 > >第三章知識點整理

第三章知識點整理

第三章知識點整理

函式
1)分類
函式分類
從使用者使用的角度看,函式有兩種:
(1)系統函式,即庫函式。
(2)使用者自己定義的函式。
從函式的形式看,函式分兩類:
(1)無參函式。呼叫函式時不必給出引數。
(2)有參函式。在呼叫函式時,要給出引數。在主調函式
和被呼叫函式之間有資料傳遞。

一.函式的定義和呼叫

main就是一個函式,它是C++程式的主函式。一個C++程式可以由一個主函式和若干子函式組成。主函式是程式執行的開始點。由主函式呼叫子函式,子函式還可以再呼叫其它子函式。

呼叫其它函式的函式稱為主調函式。被其他函式呼叫的函式稱為被調函式。一個函式很可能既呼叫別的函式又被其它函式呼叫。

1.函式的定義

1.1函式定義的語法形式

型別說明符   函式名(含型別說明的形式引數表)

{

語句序列

}

1.2形式引數

型別識別符號1   形參名1,型別識別符號2   形參名2,···,型別識別符號n   形參名n

形參的作用是實現主調函式與被調函式之間的聯絡。通常將函式所處理的資料、影響函式功能的因素或者函式的處理結果作為形參。

如果一個函式的形參表為空,則表示它沒有任何形參。main函式可以沒有形參,也可以有形參,其形參也稱命令列引數,由作業系統在啟動程式時初始化。

函式在沒有被呼叫時是靜止的,此時的形參只是一個符號,它標誌著在形參出現的位置應該有一個什麼型別的資料。

函式在被呼叫時才執行,也就是在被呼叫時才由主調函式將實際引數賦予形參。

1.3函式的返回值和返回值型別

函式可以有一個返回值,函式的返回值是需要返回給主調函式的處理結果。型別說明符規定了函式返回值的型別,函式的返回值由return語句給出,格式如下:

return 表示式;

除了指定函式的返回值外,return語句還有一個作用,就是結束當前函式的執行。

一個函式也可以不講任何值返回給主調函式,這時它的型別識別符號為void,可以不寫return語句,但也可以寫一個不帶表示式的return語句,用於結束當前函式的呼叫,格式如下:

return;

二.函式的呼叫

2.1函式的呼叫形式

變數在使用之前需要首先宣告,類似的,函式在呼叫之前也需要宣告。函式的定義就屬於函式的宣告,因此,在定義了一個函式之後,可以直接呼叫這個函式。但如果希望在定義一個函式之前呼叫它,則需要在呼叫函式之前新增該函式的函式原型宣告。函式原型宣告的形式如下:

型別說明符   函式名(含型別說明的形參表);

與變數的宣告和定義類似,宣告一個函式只是將函式的有關資訊告訴編譯器,此時並不產生任何程式碼;定義一個函式是除了同樣要給出函式的有關資訊外,主要是要寫出函式的程式碼。

聲明瞭函式原型之後,便可以按如下形式呼叫子函式:

函式名(實參列表);

實參列表應該給出與函式原型形參個數相同、型別相符的實參,每個實參都是一個表示式。函式呼叫可以作為一條語句,這時函式可以沒有返回值。函式呼叫也可以出現在表示式中,這時就必須有一個明確的返回值。

三.函式引數傳遞
C++函式的三種傳遞方式為:值傳遞、指標傳遞和引用傳遞

值傳遞:

void fun(int x){ x += 5; //修改的只是y在棧中copy x,x只是y的一個副本,在記憶體中重新開闢的一塊臨時空間把y的值 送給了x;這樣也增加了程式執行的時間,降低了程式的效率。 } void main(void){ int y = 0; fun(y); cout<<"y = "<<y<<endl; //y = 0; }

指標傳遞:

void fun(int *x){ *x += 5; //修改的是指標x指向的記憶體單元值 } void main(void){ int y = 0; fun(&y); cout<<<<"y = "<<y<<endl; //y = 5; }

引用傳遞:

void fun(int &x){ x += 5; //修改的是x引用的物件值 &x = y; } void main(void){ int y = 0; fun(y); cout<<<<"y = "<<y<<endl; //y = 5; }

1.值傳遞:有一個形參向函式所屬的棧拷貝資料的過程,如果值傳遞的物件是類物件或是大的結構體物件,將耗費一定的時間和空間。

2.指標傳遞:同樣有一個形參向函式所屬的棧拷貝資料的過程,但拷貝的資料是一個固定為4位元組的地址。

3.引用傳遞:同樣有上述的資料拷貝過程,但其是針對地址的,相當於為該資料所在的地址起了一個別名。