在 C++ 中返回指向陣列的指標

Jinku Hu 2023年10月12日
  1. 在 C++ 中使用 int var[n] 記法將陣列引數傳遞給函式,然後返回
  2. 在 C++ 中使用 int* var 符號將陣列引數傳遞給函式,然後返回
在 C++ 中返回指向陣列的指標

本文將講解 C++ 中函式中返回陣列指標的幾種方法。

在 C++ 中使用 int var[n] 記法將陣列引數傳遞給函式,然後返回

由於函式需要返回指標值,我們將假設陣列是固定長度的。另外,如果我們必須將一個動態陣列-std::vector 傳遞給函式,最好使用引用。

下一個例子演示了 subtructArray 函式,該函式減去了 array 中給定的 subtrahend 值。陣列被宣告為一個原始的 C-風格陣列,這對於使用指標的操作非常有用。陣列在傳遞的時候,引數的符號是 int arr[],但它在下面被編譯器轉換為陣列的指標,我們可以在函式體中這樣處理。最後,它直接使用變數名返回指標值,而不使用&運算子取其地址。

減去的陣列元素會輸出到控制檯,輸出最後一個元素後,有 cout 語句,在字串字面中包含\b\b。這個轉義序列意味著模擬了退格鍵行為,從而刪除了控制檯輸出的最後兩個字元。

#include <array>
#include <iostream>

using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::string;

int *subtructArray(int arr[], int size, int subtrahend) {
  for (int i = 0; i < size; ++i) {
    arr[i] -= subtrahend;
  }
  return arr;
}

constexpr int SIZE = 10;

int main() {
  int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int num = 15;

  int *ptr = subtructArray(c_array, SIZE, num);

  cout << "array1 = [ ";
  for (int i = 0; i < SIZE; ++i) {
    cout << ptr[i] << ", ";
  }
  cout << "\b\b ]" << endl;

  return EXIT_SUCCESS;
}

輸出:

array1 = [ -14, -13, -12, -11, -10, -9, -8, -7, -6, -5 ]

在 C++ 中使用 int* var 符號將陣列引數傳遞給函式,然後返回

另一種傳遞固定大小的陣列的方法是用 int* var 符號宣告一個函式引數,並在函式體完成處理後返回指標值。注意,接下來的示例程式碼使用 std::array 容器,並呼叫 data() 方法來檢索儲存陣列元素的指標。return 語句和上一個方法一樣使用變數名。

#include <array>
#include <iostream>

using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::string;

int *subtructArray(int *arr, int size, int subtrahend) {
  for (int i = 0; i < size; ++i) {
    arr[i] -= subtrahend;
  }
  return arr;
}

constexpr int SIZE = 10;

int main() {
  array<int, SIZE> arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  int num = 15;

  int *ptr2 = subtructArray(arr1.data(), arr1.size(), num);

  cout << "array2 = [ ";
  for (int i = 0; i < SIZE; ++i) {
    cout << ptr2[i] << ", ";
  }
  cout << "\b\b ]" << endl;

  return EXIT_SUCCESS;
}

輸出:

array1 = [ -14, -13, -12, -11, -10, -9, -8, -7, -6, -5 ]
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Array