1. 程式人生 > >C++primer第五版 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。

C++primer第五版 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。

該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。

附上程式碼:

// 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;  //返回最大值
}

效果如下:

但是如果要對引數進行修改,例如交換引數值,將引數值擴大幾倍等等,就不能用傳值方式,因為當實參的值拷貝給形參時,形參和實參是兩個相互獨立的物件,函式對形參做的所有操作都不會影響實參。但是如果是傳指標,那麼拷貝的是指標的值,可以讓我們間接地訪問它所指的物件。傳引用和傳指標是類似的。