【C++】用指针做函数参数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/82944252

此篇博客程序运行环境为:VS2017!!!

函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。

它的作用是将一个变量的的地址传给被调用函数的形参。

e.g. 输入两个数,按由大到小顺序输出

#include<iostream>
using namespace std;
int main()
{
	void swap(int *p1, int *p2);
	int *p1, *p2, a, b;
	cin >> a >> b;
	p1 = &a;
	p2 = &b;
	if (a < b)
	{
		swap(p1, p2);
	}
	cout <<"max="<< a << " min=" << b << endl;
	return 0;
}
void swap(int *p1, int *p2)
{
	int t;
	t = *p1;
	*p1 = *p2;
	*p2 = t;
}

 e.g.输入三个数,从大到小排序

#include <iostream>
using namespace std;
int main()
{
	void exchange(int *, int *, int *);
	int a, b, c, *p1, *p2, *p3;
	cin >> a >> b >> c;
	p1 = &a;
	p2 = &b;
	p3 = &c;
	exchange(p1, p2, p3);
	cout << a << " " << b << " " << c << endl;
	return 0;
}
void exchange(int *p1, int *p2, int *p3)
{
	void swap(int *x, int *y);
	if (*p1 < *p2)	swap(p1, p2);
	if (*p1 < *p3)	swap(p1, p3);
	if (*p2 < *p3)	swap(p2, p3);
}
void swap(int *x, int *y)
{
	int t;
	t = *x; *x = *y; *y = t;
}

 

本题采用的方法是:交换a和b的值,而p1,p2不变 

 

注意以下几点:

1、不要将main函数里的swap函数调用写成:

if (a < b)    swap(*p1, *p2);

*p1和*p2是整型变量,其值为整数,与形参不匹配。

2、单向的值传递,只能从实参向形参传数据,形参值的改变无法回传给实参。

void swap(int x, int y)
{
	int t;
	t = x;
	x = y;
	y = t;
}

3、

#include<iostream>
using namespace std;
int main()
{
	void swap(int *p1, int *p2);
	int *p1, *p2, a, b;
	cin >> a >> b;
	p1 = &a;
	p2 = &b;
	if (a < b)
	{
		swap(p1, p2);
	}
	cout <<"max="<< a << " min=" << b << endl;
	return 0;
}
void swap(int *p1, int *p2)
{
	int *t;
	t = p1;
	p1 = p2;
	p2 = t;
}

写该程序的人意图在交换p1和p2的值。

但是要特别注意:调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向的变量的值。

函数的调用可以(而且只可以)得到一个返回值(函数值),而是用指针变量作为函数的参数,就可以通过指针变量改变主调函数中的参数值,相当于通过函数调用从被调用的函数中得到多个值

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/82944252
今日推荐