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

C++ポインタをマスター:概念、例、実践的応用

ポインタとは

C++におけるポインタとは、別の変数のメモリアドレスを格納する変数です。ポインタの型は、それが指すデータの型と一致しなければなりません。例えば、int*はintオブジェクトのアドレスのみを保持できます。

ポインタを使うと、プログラムはメモリ内のデータを直接操作でき、効率的なデータ構造、動的割り当て、参照渡しセマンティクスを実現できます。

メモリアドレスの理解

すべての変数はRAM上の一意の場所に割り当てられます。参照演算子&でそのアドレスを取得できます。変数xに対して、&xはそのメモリ位置を生成します。

ポインタ宣言の構文

宣言は以下のパターンに従います:

datatype *pointer_name;

例:

int *p;     // intへのポインタ
double *d;  // doubleへのポインタ
char *c;    // charへのポインタ

参照(&)と間接参照(*)

&演算子は変数のアドレスを与え、*演算子はそのアドレスに格納されている値を取得します。

#include <iostream>
using namespace std;
int main() {
    int x = 27;
    int *ip = &x;
    cout << "Value of x: " << x << endl;
    cout << "Address of x: " << ip << endl;
    cout << "Value via pointer: " << *ip << endl;
    return 0;
}

出力:

Value of x: 27
Address of x: 0x7ffeefbff5ac
Value via pointer: 27

ポインタと配列

配列名は最初の要素へのポインタに変換されます。したがって:

int arr[5];
int *p = arr;      // 正しい
int *q = &arr;     // 間違い – &arrは配列全体のアドレスであり、最初の要素ではない

ポインタを使った配列のイテレーション:

#include <iostream>
using namespace std;
int main() {
    int *p;
    int arr[] = {10, 34, 13, 76, 5, 46};
    p = arr;
    for (int i = 0; i < 6; ++i) {
        cout << *p++ << endl;
    }
    return 0;
}

出力:

10
34
13
76
5
46

ヌルポインタ

有効なターゲットを持たないポインタは、NULL(またはC++11以降ではnullptr)で初期化すべきです。これにより誤った間接参照を防止できます。

#include <iostream>
using namespace std;
int main() {
    int *ip = nullptr;
    cout << "ip = " << ip << endl; // 0と表示
    return 0;
}

関数でのポインタ使用

関数にポインタを渡すと、関数は元の変数を変更できます。この技法で参照渡しを実装します。

#include <iostream>
using namespace std;
void modify(int *p1, int *p2) {
    *p1 = 10;
    *p2 = 11;
}
int main() {
    int a = 5, b = 5;
    cout << "Before: a=" << a << ", b=" << b << endl;
    modify(&a, &b);
    cout << "After: a=" << a << ", b=" << b << endl;
    return 0;
}

出力:

Before: a=5, b=5
After: a=10, b=11

ポインタの利点

クイックサマリー

C言語

  1. C++配列を徹底解説:宣言、初期化、ポインタ活用テクニック
  2. C++ do-while文:構文、実践例、ネストしたループ
  3. C++ポインタをマスター:概念、例、実践的応用
  4. C++ char型をマスター:宣言、ASCII、変換テクニック
  5. C++演算子オーバーロード:コード例付き実践ガイド
  6. C++構造体を実例で徹底解説
  7. C++のstd::listをマスターする:構文、関数、実践例
  8. C++関数を実例で徹底解説:基本から応用まで
  9. C#コレクション実践チュートリアル:実例で学ぶ柔軟なデータ管理
  10. C 言語ポインタ完全ガイド: 型、使い方、ベストプラクティス
  11. C言語ポインタ完全マスター:実践的ステップで上級プログラミングへ