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);與普通無異
函數體中 *+字符 函數體中與普通無異,僅有字符

在這裏插入圖片描述

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