工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++参照渡し:ポインタを使った実践例

C++参照渡し:ポインタを使った実践例

このガイドでは、ポインタを使ってC++で引数を参照渡しする方法を、値の交換などの明確なコード例で解説します。

C++関数の世界では、データを渡すデフォルトの方法は値渡しです:関数は元のデータのコピーを受け取ります。これにより元の変数は保護されますが、大きなオブジェクトでは非効率であり、関数が呼び出し元のデータを変更できなくなります。

参照渡しは両方の問題を解決します。データをコピーする代わりに、関数は元の変数への参照(またはアドレス)を受け取り、直接操作できるようになります。これはC++参照または生ポインタの2つの同等な方法で実現できます。両方のアプローチを理解することで柔軟性とメモリ処理への深い洞察が得られます。

// 値を受け取る関数
void func1(int numVal) {
    // コード
}

// 参照を受け取る関数(C++参照構文)
void func2(int &numRef) {
    // コード
}

int main() {
    int num = 5;
    // 値渡し
    func1(num);
    // 参照渡し
    func2(num);
    return 0;
}

void func2(int &numRef)の&は、パラメータが参照であることを示します。func2が呼び出されると、numの値ではなくアドレスが渡され、関数内でnumを直接変更できます。

C++参照渡し:ポインタを使った実践例

例1: C++参照を使った値の交換

#include <iostream>
using namespace std;

// 参照を使ったswap関数
void swap(int &n1, int &n2) {
    int temp = n1;
    n1 = n2;
    n2 = temp;
}

int main() {
    int a = 1, b = 2;
    cout << "交換前\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    swap(a, b);
    cout << "\n交換後\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

出力

交換前
a = 1
b = 2
交換後
a = 2
b = 1

この例では、swapは2つの参照を受け取ります。n1とn2がaとbの別名(エイリアス)であるため、関数内での変更が元の変数に影響します。


例2: ポインタを使った値の交換

#include <iostream>
using namespace std;

// ポインタを使った関数プロトタイプ
void swap(int*, int*);

int main() {
    int a = 1, b = 2;
    cout << "交換前\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    // aとbのアドレスを渡す
    swap(&a, &b);
    cout << "\n交換後\n";
    cout << "a = " << a << "\n";
    cout << "b = " << b << "\n";
    return 0;
}

// ポインタを使ったswap関数
void swap(int* n1, int* n2) {
    int temp = *n1;
    *n1 = *n2;
    *n2 = temp;
}

出力

交換前
a = 1
b = 2
交換後
a = 2
b = 1

ここでは、swapは生ポインタを受け取ります。*で間接参照することで、関数は渡されたアドレスの値にアクセスし変更します。結果は参照版と同一ですが、ポインタ構文ではアドレス渡しが明示的になります。

参照とポインタの選択は文脈によります:参照はより安全でクリーンな構文を提供し、ポインタはメモリアドレスへの明示的な制御を提供し、動的確保には不可欠です。

C言語

  1. 2021年のマルウェア13種類:脅威、事例、対策
  2. 5つのデータセンターモデルを解説:設計、ユースケース、事例
  3. 2021年の主要テックトレンド8選:実例とともに探る
  4. C# usingステートメント完全ガイド:名前空間インポート、エイリアス、静的ディレクティブ
  5. C++演算子完全ガイド:算術・代入・関係・論理・ビット演算子と実例
  6. C++コメント完全ガイド:読みやすく保守しやすいコードのためのベストプラクティス
  7. C++クラステンプレート完全ガイド:実践的なジェネリックプログラミング
  8. C言語ポインタ完全マスター: 実践的エキスパートガイド
  9. C++ポインタをマスター:概念、例、実践的応用
  10. C言語ポインタ完全マスター:実践的ステップで上級プログラミングへ
  11. C++プログラミング言語:概要と主要機能