使用者工具

網站工具


cpp:pointerreferences

國立屏東大學 資訊工程學系 物件導向程式設計

8. 指標與參考


8.1 指標

C++與C語言一樣,提供了指標以存取特定的記憶體位址,其用法與C語言並無二致,在此不予贅述。

8.2 參考(Reference)變數

C++讓我們可以為某個變數,建立一個「別名」。

using namespace std;
#include <iostream>
 
int main ()
{
 
   double a = 3.1415927;
   int    *p;
   double &b = a;                            // b is a
 
   b = 89;
 
   cout << "a contains: " << a << endl;     // Displays 89.
 
   return 0;
}

在上述範例中,b被稱為參考變數(reference variable),我們在宣告b時,使用&b=a來讓b成為a的分身。要注意的是,一但宣告後,不可以再改變其參考的對象。

參考變數也可以用在函式的引數宣告,例如下面的程式碼:

using namespace std;
#include <iostream>
 
void change (double &r, double s)
{
   r = 100;
   s = 200;
}
 
int main ()
{
   double k, m;
 
   k = 3;
   m = 4;
 
   change (k, m);
 
   cout << k << ", " << m << endl;        // Displays 100, 4.
 
   return 0;
}

這種將參考傳入函式做為引數的方法,稱為Call by Reference。下面則是以指標的方式,將前述程式再實作一次:

using namespace std;
#include <iostream>
 
void change (double *r, double s)
{
   *r = 100;
   s = 200;
}
 
int main ()
{
   double k, m;
 
   k = 3;
   m = 4;
 
   change (&k, m);
 
   cout << k << ", " << m << endl;        // Displays 100, 4.
 
   return 0;
}

下面的程式則又複雜了一點:

using namespace std;
#include <iostream>
 
double &biggest (double &r, double &s)
{
   if (r > s) return r;
   else       return s;
}
 
int main ()
{
   double k = 3;
   double m = 7;
 
   cout << "k: " << k << endl;       // Displays  3
   cout << "m: " << m << endl;       // Displays  7
   cout << endl;
 
   biggest (k, m) = 10;
 
   cout << "k: " << k << endl;       // Displays  3
   cout << "m: " << m << endl;       // Displays 10
   cout << endl;
 
   biggest (k, m) ++;
 
   cout << "k: " << k << endl;       // Displays  3
   cout << "m: " << m << endl;       // Displays 11
   cout << endl;
 
   return 0;
}

這個程式蠻有趣的吧!

cpp/pointerreferences.txt · 上一次變更: 2022/03/11 05:51 由 junwu

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki