C++指针在函数中的应用

指针参数

参数分为形参和实参;
定义是是形参,调用时是实参。
通过一个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);与普通无异
函数体中 *+字符 函数体中与普通无异,仅有字符

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章