版权声明:本文为博主原创文章,未经博主允许不得转载。 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的值。
但是要特别注意:调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向的变量的值。
函数的调用可以(而且只可以)得到一个返回值(函数值),而是用指针变量作为函数的参数,就可以通过指针变量改变主调函数中的参数值,相当于通过函数调用从被调用的函数中得到多个值。