C++primer第五版 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。
阿新 • • 發佈:2019-01-02
該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。
附上程式碼:
// primer_6_2_4.cpp : Defines the entry point for the application. // 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。 #include "stdafx.h" #include<iostream> using namespace std; int main() { int fun_max(int,int*); //函式宣告,兩個引數,一個是int型的數,另一個是int指標 int a,b,*p; //定義兩個int型變數a,b用於接收使用者輸入資料,指標p用於指向b int max; //定義一個int型變數存放最大值 cout << "input two numbers: " << endl; //提示使用者輸入 cin >> a >> b; p = &b; //將指標p與資料b關聯 max = fun_max(a,p); //呼叫函式求最大值 cout << "the max number is: " << max << endl; //列印最大值 system("pause"); return 0; } int fun_max(int aa,int*bb) //求最大值的函式 { int result; //函式範圍內有效的區域性變數,用於存放最大值 if(aa > *bb) //aa為數,bb為指標,因此aa必須與解引用*bb比較 result=aa; else result=*bb; return result; //返回最大值 }
效果如下:
但是如果要對引數進行修改,例如交換引數值,將引數值擴大幾倍等等,就不能用傳值方式,因為當實參的值拷貝給形參時,形參和實參是兩個相互獨立的物件,函式對形參做的所有操作都不會影響實參。但是如果是傳指標,那麼拷貝的是指標的值,可以讓我們間接地訪問它所指的物件。傳引用和傳指標是類似的。