程式設計基礎/間接運算子
C++ 程式語言中使用的間接運算子簡介。
當我們將引數傳遞給函式時,我們通常按值傳遞;也就是說,呼叫函式根據需要向被呼叫函式提供多個值。被呼叫函式獲取這些值,這些值具有區域性作用域,並將它們儲存在堆疊上,根據需要使用它們來完成函式完成的任何處理。這是呼叫使用者定義的特定任務函式時的首選方法。被呼叫函式在需要時將單個值作為返回值項返回。這具有封閉通訊模型的優勢,所有內容都被整齊地傳遞進來作為值,任何需要的專案都被作為引數返回。
出於必要性,這種封閉通訊模型有兩個例外
- 當我們需要函式返回多個資訊項時
- 當無法合理或正確地建立引數副本時(例如:檔案流物件)。
這些例外可以透過引用傳遞引數而不是按值傳遞來處理。
可以使用引用變數或指標變數按引用傳遞引數,指標變數需要使用間接運算子。在 C++ 中,星號用作間接運算子。當一個變數用間接運算子標記時,表示變數中地址所指向的值,而不是變數的值(一個地址)。使用間接運算子引用記憶體中特定位置的值的過程也稱為解除引用。
// prototype
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_value_quarters);
// variable definitions
int dimes = 45;
int quarters = 33;
double value_dimes;
double value_quarters;
double * ptr_value_dimes = &value_dimes;
double * ptr_value_quarters = &value_quarters;
// somewhere in the function main
process_values(dimes, quarters, ptr_value_dimes, ptr_value_quarters);
// definition of the function
void process_values(int qty_dimes, int qty_quarters, double * ptr_value_dimes, double * ptr_quarters);
{
* ptr_value_dimes = dimes * 0.10;
* ptr_value_quarters = quarters * 0.25;
}
當定義指標變數時,星號必須同時出現在原型和函式定義中,但在將指標傳遞到函式時,它不會出現在函式呼叫中。
上面的示例展示了間接運算子的基本機制。
使用帶間接運算子的指標通常是處理陣列的首選方法。陣列索引運算子也稱為陣列解除引用方法。以下 cout 是等效的
int ages[] = {47, 45, 18, 11, 9};
cout << ages[3];
cout << *(ages + 3);
它們都表示,“陣列的名稱是指標;取指標並計算一個指向第 3 個偏移量的地址,透過在指標上新增正確的位元組數來實現(整數資料型別通常長 4 個位元組 - 3 個偏移量乘以 4 個位元組是 12 個位元組);然後解除對該指標的引用(因為這是一個 Rvalue 上下文 - 獲取您指向的值)並將其傳送到標準輸出裝置。”
您應該結合本模組研究演示程式。
根據您的編譯器/IDE,您應該決定在哪裡下載和儲存用於處理的原始碼檔案。謹慎起見,您應該在下載原始碼檔案之前根據需要建立這些資料夾。Bloodshed Dev-C++ 5 編譯器/IDE 的推薦子資料夾可能名為
- Demo_Programs
如果您尚未建立,請根據需要建立資料夾和/或子資料夾。
將以下檔案下載並存儲到您儲存裝置的相應資料夾中。按照您的編譯器/IDE 的方法,編譯並執行程式。結合其他學習資料研究原始碼檔案。您可能需要右鍵單擊連結並選擇“將目標另存為”才能下載檔案。
從 Connexions 下載:Demo_Pointer_Passing.cpp
從 Connexions 下載:Demo_Array_ 指標處理.cpp
- 間接運算子
- 用於解除引用指標的星號。
- 解除引用
- 使用指標或地址所指向的專案的概念。