【不是惡夢的開始,而是再度的精進。 C++ 回傳指標】
在呼叫函數時,引數有傳值、傳址、傳參考等方式。而函數回傳時也有回傳值、回傳指標等方式,回傳值得方式我們就不多說了(程式入口 int main()就是回傳整數值給作業系統),我們直接來看看回傳指標。
#include <iostream>
using namespace std;
int* pmax(int* pdi, int* pei)
{
cout << "\npdi = " << pdi;
cout << "\npei = " << pei;
if(*pdi > *pei)
return pdi;
else
return pei;
}
int main()
{
int ai = 4, bi = 8;
cout << "\n&ai = " << &ai;
cout << "\n&bi = " << &bi;
int* pci = pmax( &ai, &bi);
cout << "\npci = " << pci;
cout << "\n*pci = " << *pci;
return 0;
}
執行結果:
&ai = 0x70fe08
&bi = 0x70fe0c
pdi = 0x70fe08
pei = 0x70fe0c
pci = 0x70fe0c
*pci = 8
當函數要回傳指標的時候,我們就要以指標的方式來宣告,在回傳的方式加上*
int* pmax(int* pdi, int* pei)
而要接受回傳指標的變數當然就必須是指標變數
int* pci = pmax( &ai, &bi);
我們可以從執行結果來看
&ai == pdi
&bi == pei
從pci來看確實是函數回傳指標,而bi > ai,所以pci也就被設定為pei(也就是&bi),而pci的內容用依址取值*pci來看,也確實是8,所以回傳的是正確的指標。
我們再用陣列來看一次回傳指標
#include <iostream>
using namespace std;
int* smallest(int* data, int cnt)
{
int min = 0;
for(int i = 0; i < cnt; i++)
if(*(data + i) < *(data + min))
min = i;
return &data[min];
}
int main()
{
int data[]=
{63,25,73,24,145,16,67};
int cnt = sizeof data / sizeof data[0];
int ai = *smallest(data, cnt);
cout << "最小值 = " << ai;
return 0;
}
執行結果:
最小值 = 16
.
留言列表