C++ の配列へのポインタを返す
胡金庫
2023年10月12日
この記事では、C++ の関数で配列へのポインタを返すいくつかの方法を説明します。
C++ で配列の引数を関数に渡して返すには int var[n]
記法を使用する
関数はポインタの値を返す必要があるので、配列は固定長であると仮定します。あるいは、動的な配列 std::vector
を関数に渡す必要がある場合は、参照を利用した方がよいでしょう。
次の例では、subtructArray
関数を用いて、array
の各値を減算します。配列は生の C スタイルの配列として宣言されており、これはポインタを使って操作するのに便利です。配列はパラメータの int arr[]
記法で渡されますが、その下ではコンパイラによって配列へのポインタとして変換され、関数本体ではそのように扱うことができます。最後に、 &
演算子でアドレスを取らずに変数名を直接指定してポインタの値を返します。
減算した配列の要素をコンソールに出力し、最後の要素を出力した後、文字列リテラルに \b\b
を含む cout
文があります。このエスケープシーケンスは、バックスペースキーの動作がエミュレートされ、コンソール出力の最後の 2 文字が削除されることを意味します。
#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 ]
著者: 胡金庫