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

效果如下:

但是如果要对参数进行修改,例如交换参数值,将参数值扩大几倍等等,就不能用传值方式,因为当实参的值拷贝给形参时,形参和实参是两个相互独立的对象,函数对形参做的所有操作都不会影响实参。但是如果是传指针,那么拷贝的是指针的值,可以让我们间接地访问它所指的对象。传引用和传指针是类似的。

猜你喜欢

转载自blog.csdn.net/elma_tww/article/details/82493582