C++ 指標



C++ 指標易於學習且趣味十足。一些 C++ 任務使用指標更容易完成,而其他 C++ 任務(例如動態記憶體分配)則無法在沒有指標的情況下完成。

如你所知,每個變數都是一個記憶體位置,每個記憶體位置都有其定義的地址,可以使用地址符 (&) 運算子訪問,該運算子表示記憶體中的地址。考慮以下內容,它將列印已定義變數的地址:

#include <iostream>

using namespace std;
int main () {
   int  var1;
   char var2[10];

   cout << "Address of var1 variable: ";
   cout << &var1 << endl;

   cout << "Address of var2 variable: ";
   cout << &var2 << endl;

   return 0;
}

編譯並執行上述程式碼後,將產生以下結果:

Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6

什麼是指標?

指標是一個變數,其值是另一個變數的地址。像任何變數或常量一樣,您必須在使用指標之前宣告它。指標變數宣告的一般形式為:

type *var-name;

這裡,type 是指標的基本型別;它必須是有效的 C++ 型別,而 var-name 是指標變數的名稱。用於宣告指標的星號與用於乘法的星號相同。但是,在此語句中,星號用於將變數指定為指標。以下是有效的指標宣告:

int    *ip;    // pointer to an integer
double *dp;    // pointer to a double
float  *fp;    // pointer to a float
char   *ch     // pointer to character

所有指標的實際資料型別,無論是整數、浮點數、字元還是其他型別,都是相同的,一個表示記憶體地址的長十六進位制數。不同資料型別指標之間的唯一區別在於指標指向的變數或常量的型別。

在 C++ 中使用指標

有一些重要的操作,我們將非常頻繁地對指標執行這些操作。(a) 我們定義一個指標變數。(b) 將變數的地址賦給指標。(c) 最後訪問指標變數中可用地址處的值。這是透過使用一元運算子 * 來完成的,它返回位於其運算元指定的地址處的變數的值。下面的示例使用了這些操作:

#include <iostream>

using namespace std;

int main () {
   int  var = 20;   // actual variable declaration.
   int  *ip;        // pointer variable 

   ip = &var;       // store address of var in pointer variable

   cout << "Value of var variable: ";
   cout << var << endl;

   // print the address stored in ip pointer variable
   cout << "Address stored in ip variable: ";
   cout << ip << endl;

   // access the value at the address available in pointer
   cout << "Value of *ip variable: ";
   cout << *ip << endl;

   return 0;
}

編譯並執行上述程式碼後,將產生如下所示的結果:

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

C++ 中的指標

指標有很多但簡單的概念,它們對 C++ 程式設計非常重要。C++ 程式設計師應該清楚以下幾個重要的指標概念:

序號 概念和描述
1 空指標

C++ 支援空指標,它是一個值為零的常量,在多個標準庫中定義。

2 指標算術

有四個算術運算子可用於指標:++,--,+,-

3 指標與陣列

指標和陣列之間存在密切關係。

4 指標陣列

您可以定義陣列來儲存多個指標。

5 指向指標的指標

C++ 允許您擁有指向指標的指標,依此類推。

6 將指標傳遞給函式

透過引用或透過地址傳遞引數都可以使被呼叫函式在呼叫函式中更改傳遞的引數。

7 從函式返回指標

C++ 允許函式返回指向區域性變數、靜態變數和動態分配記憶體的指標。

廣告