C++ 解引用與函式基礎:記憶體地址、呼叫方法及宣告

小万哥丶發表於2024-04-12

C++ 解引用

獲取記憶體地址和值

在上一頁的示例中,我們使用了指標變數來獲取變數的記憶體地址(與引用運算子 & 一起使用)。但是,你也可以使用指標來獲取變數的值,這可以透過使用 * 運算子(解引用運算子)來實現:

string food = "Pizza"; // 變數宣告
string* ptr = &food; // 指標宣告

// 引用:使用指標輸出 food 的記憶體地址(0x6dfed4)
cout << ptr << "\n";

// 解引用:使用指標輸出 food 的值(Pizza)
cout << *ptr << "\n";

需要注意的是,符號 * 在這裡可能會讓人感到困惑,因為它在我們的程式碼中有兩種不同的作用:

  • 在宣告中使用時(string* ptr),它建立一個指標變數。
  • 在非宣告中使用時,它作為解引用運算子。

修改指標值

你可以改變指標的值。但要注意,這也會改變原始變數的值:

string food = "Pizza";
string* ptr = &food;

// 輸出 food 的值(Pizza)
cout << food << "\n";

// 輸出 food 的記憶體地址(0x6dfed4)
cout << &food << "\n";

// 訪問 food 的記憶體地址並輸出其值(Pizza)
cout << *ptr << "\n";

// 改變指標的值
*ptr = "Hamburger";

// 輸出指標的新值(Hamburger)
cout << *ptr << "\n";

// 輸出 food 變數的新值(Hamburger)
cout << food << "\n";

解引用指標的注意事項

  • 解引用指標時,要確保指標指向有效的記憶體地址,否則會導致程式崩潰。
  • 不要解引用空指標,這會導致程式崩潰。
  • 修改指標的值可能會導致意外的結果,應謹慎操作。

總結

解引用是 C++ 中一個重要的概念,它允許你獲取指標指向的變數的值或記憶體地址。在使用解引用運算子時,要遵循一些注意事項,以避免程式崩潰或意外結果。

C++ 函式

函式概述

函式是一組用於執行特定任務的封裝程式碼塊。它們可以提高程式碼的可重用性、可讀性和可維護性。

建立函式

在 C++ 中,建立函式需要遵循以下語法:

returnType functionName(parameterList) {
  // 函式體
}

其中:

  • returnType:函式的返回值型別,可以是 void(無返回值)或其他資料型別。
  • functionName:函式名稱,由字母、數字和下劃線組成,但不能以數字開頭。
  • parameterList:函式引數列表,引數之間用逗號分隔,每個引數由資料型別和引數名組成。
  • 函式體:函式要執行的程式碼,由花括號括起來。

例如,以下程式碼建立了一個名為 printMessage 的函式,該函式接收一個字串引數並將其列印到控制檯:

void printMessage(string message) {
  cout << message << endl;
}

函式呼叫

要呼叫函式,只需在程式碼中寫下函式名及其引數值,例如:

printMessage("Hello, world!");

函式引數

函式引數可以是輸入引數、輸出引數或輸入輸出引數。

  • 輸入引數:函式從呼叫者接收資料。
  • 輸出引數:函式將資料返回給呼叫者。
  • 輸入輸出引數:函式既可以接收資料又可以返回資料。

在 C++ 中,函式引數預設是輸入引數。要宣告輸出引數或輸入輸出引數,需要使用引用或指標。

函式返回值

函式可以返回一個值給呼叫者。返回值型別寫在函式宣告的括號前面,例如:

int square(int number) {
  return number * number;
}

該函式接收一個整數引數 number,並返回其平方值。要呼叫該函式並獲取返回值,可以使用以下程式碼:

int result = square(5);
cout << result << endl; // 輸出 25

函式宣告和定義

函式宣告告訴編譯器函式的名稱、返回值型別和引數列表,而函式定義提供了函式要執行的程式碼。

函式宣告通常放在程式的開頭,而函式定義放在後面。例如:

// 函式宣告
void printMessage(string message);
int square(int number);

// ...

// 函式定義
void printMessage(string message) {
  cout << message << endl;
}

int square(int number) {
  return number * number;
}

函式過載

函式過載是指允許使用相同名稱但不同引數列表的多個函式。例如:

void printMessage(string message) {
  cout << message << endl;
}

void printMessage(int number) {
  cout << number << endl;
}

在呼叫這些函式時,需要根據實際引數型別選擇正確的函式。

函式的作用域

函式的作用域是指函式內的變數和函式名在程式中可見的範圍。函式內的變數和函式名只在該函式內可見,在其他函式中不可見。

總結

函式是 C++ 中重要的程式設計概念,它們可以提高程式碼的可重用性、可讀性和可維護性。透過理解函式的宣告、定義、呼叫和引數傳遞等概念,您可以編寫更簡潔、更有效的 C++ 程式。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章