C++ の配列へのポインタを返す

胡金庫 2023年10月12日
  1. C++ で配列の引数を関数に渡して返すには int var[n] 記法を使用する
  2. 配列の引数を関数に渡し、C++ で int* var 記法を使用して返す
C++ の配列へのポインタを返す

この記事では、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 ]
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Array