Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のポインタとは?基本構文と使い方を実例付きで解説

ポインタとは、他の変数のアドレス(メモリ上の場所)を格納するための特殊な変数です。変数にメモリが割り当てられると、その変数の先頭アドレスをポインタが指し示すことになります。C言語およびC++では、単項演算子「*(アスタリスク)」を使ってポインタ変数を宣言します。

ポインタの基本構文

ポインタ変数は、以下のような形式で宣言します。

データ型 *変数名;

各要素の意味は次のとおりです。

  • データ型 … ポインタが指し示す変数の型です。int、char、float などが該当します。
  • 変数名 … プログラマが自由に決められるポインタ変数の名前です。

たとえば、int 型の値を指すポインタなら int *ptr; のように宣言します。

ポインタの使用例

次のサンプルプログラムでは、整数変数 a のアドレスをポインタ ptr に代入し、変数の値・アドレス・間接参照による値をそれぞれ表示しています。

#include <stdio.h>

int main() {
    int a = 8;      // 整数変数の宣言と初期化
    int *ptr;       // ポインタ変数の宣言
    ptr = &a;       // 変数aのアドレスをptrに代入

    printf("Value of variable : %d\n", a);
    printf("Address of variable : %d\n", ptr);
    printf("Value pointer variable : %d\n", *ptr);
    return 0;
}

実行結果

Value of variable : 8
Address of variable : -201313340
Value pointer variable : 8

プログラムのポイント

このプログラムでは、まず整数変数 a を宣言して 8 で初期化し、続いてポインタ変数 *ptr を宣言しています。そして、アドレス演算子「&」を使って変数 a のアドレスを取得し、それを ptr に代入しています。

int a = 8;    // 整数変数aを8で初期化
int *ptr;     // int型を指すポインタ変数ptrを宣言
ptr = &a;     // aのアドレスをptrに格納

ここで重要なのは次の2点です。

  • &a … 変数 a のメモリアドレスを取得する(アドレス演算子)。
  • *ptr … ポインタ ptr が指すアドレスに格納されている値を取り出す(間接参照・デリファレンス)。

実行結果を見ると、「Address of variable」の値(-201313340)は環境によって異なる場合があります。これは、OSや実行ごとにメモリ上のアドレス配置が変わるためです。一方、「Value pointer variable」には *ptr を通じて元の変数 a の値である 8 が正しく表示されており、ポインタ経由でも同じ値にアクセスできることが確認できます。

  1. C/C++のmemcpy()関数の使い方と実例解説

    この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ

  2. C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説

    AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ