close

【不是惡夢的開始,而是再度的精進。 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


 

 

.

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 伊蒙‧普羅客 的頭像
    伊蒙‧普羅客

    面向陽光,陰影就會在身後

    伊蒙‧普羅客 發表在 痞客邦 留言(7) 人氣()