指針參數
參數分爲形參和實參;
定義是是形參,調用時是實參。
通過一個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);與普通無異 |
– | – |
函數體中 *+字符 | 函數體中與普通無異,僅有字符 |