指针参数
参数分为形参和实参;
定义是是形参,调用时是实参。
通过一个swap函数看一下指针在函数中的应用
#include<iostream>
using namespace std;
void swap(int *,int *); //调用之前的声明
int main()
{int a=3,b=8;
cout<<"before swapping...\n";
cout<<"a="<<a<<",b="<<b<<endl;
swap(&a,&b); //调用函数
cout<<"after swapping..\n";
cout<<"a="<<a<<",b="<<b<<endl;
}
void swap(int *x,int *y) //定义函数
{int temp=*x;
*x=*y;
*y=temp;
}
可以看出函数调用时指针参数的实参是地址
运行结果:
可以把int*
看作一种结构类型
如swap(int *,int *)
和swap(doouble,double)
可以看出声明时它俩的地位一致
下面一个问题,要求写一个函数,该函数可以判断输入的三个值中的最大值和最小值并能在主函数输出
#include <iostream>
using namespace std;
void M(double x,double y,double z,double *p1,double *p2)
{double u,v; //函数中定义两个变量用于接收
if (x>y)
{u=x;v=y;}
else
{u=y;v=x;} //u接收前两个之中的大值即最大值
if(z>u) u=z; //再拿u(最大值)与第三个值比较
if(z<v) v=z; //再拿v(最小值)与第三个值比较
*p1=u; //这里可以看作通过指针改变变量的值
*p2=v; //同上...
}
int main ()
{ double a,b,c,max,min;
cin>>a>>b>>c;
M(a,b,c,&max,&min); //以地址访问
cout<<max<<endl;
cout<<min<<endl;
}
这里就是用了通过指针改变变量的值
void M(double x,double y,double z,double *p1,double *p2)
由上面可以看出传参,double* p1,double* p2
*************就相当于double max ,double min
另一个就是引用参数
如果函数的形式参数被定义为引用类型,则称为引用参数
引用参数对应实际参数应该是对象名
再用第一个swap 函数这次用引用参数
#include<iostream>
using namespace std;
viod swap(int&,int&);
int main()
{int a=3,b=8;
cout<<"before swapping...\n";
cout<<"a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after swapping..\n";
cout<<"a="<<a<<",b="<<b<<endl;
}
void swap(int& x,int& y)
{int temp =x;
x=y;
y=temp;
}
可以看到swap函数体里与普通函数一样
而指针变量swap函数体里都用*字符表示
指针参数与引用参数三点不同
|
指针变量 | 引用变量 |
---|---|
形参 void swap(int *x,int *y) | 形参void swap(int& x,int& y) |
实参引用swap(&a,&b); | 引用swap(a,b);与普通无异 |
– | – |
函数体中 *+字符 | 函数体中与普通无异,仅有字符 |