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

Jinku Hu 2023年1月30日 2021年1月4日
  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 <iostream>
#include <array>

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

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 <iostream>
#include <array>

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

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 ]
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ Array