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

C言語のポインタとは?基本概念と使い方を初心者向けに解説

ポインタ(pointer)とは、他の変数のメモリアドレス(番地)を格納するための特殊な変数です。C言語では、メモリを直接操作できることが大きな特徴であり、その中核を担っているのがポインタです。

ポインタの主な特徴

  • アドレスを扱うことで、メモリ領域を効率的に節約できる。

  • メモリ上の場所に直接アクセスするため、実行速度が速い。

  • ポインタを介してメモリに効率よくアクセスできる。

  • 動的メモリ割り当て(malloc・freeなど)による、柔軟なメモリ管理が可能。

  • 連結リストや木構造などのデータ構造の実装に不可欠。

ポインタの基本的な書き方

ポインタへの代入は、次のように記述します。

pointer = &variable;

つまり、「&(アドレス演算子)」を使って変数のアドレスを取得し、それをポインタ変数に代入します。

サンプルプログラム

以下は、ポインタの基本的な使い方を示すC言語プログラムです。

#include <stdio.h>
int main(){
   int x=40; // 変数の宣言
   int *p; // ポインタ変数の宣言
   p=&x; // 変数xのアドレスをポインタpに格納
   printf("ポインタpに格納されているアドレス:%d\n",p); // アドレスの表示
   printf("ポインタpが指す値:%d\n",*p); // 値の表示
   return 0;
}

実行結果

上記のプログラムを実行すると、次のような結果が出力されます(アドレスの値は環境によって異なります)。

ポインタpに格納されているアドレス:5ff678
ポインタpが指す値:40

「*」演算子と「&」演算子の役割

C言語のポインタ操作では、*(間接参照演算子)と&(アドレス演算子)が重要な役割を果たします。

* 演算子(アスタリスク)

* 演算子には、次の2つの用途があります。

  • ポインタ変数の宣言(int *p; など)。

  • ポインタが指し示す先の変数の値を取得する(間接参照・デリファレンス)。

& 演算子(アンパサンド)

& 演算子には、次の1つの用途があります。

  • 変数のメモリアドレスを返す。

この2つの演算子を正しく理解することが、C言語のポインタをマスターする第一歩となります。

  1. C言語におけるユニオンとポインタの使い方を徹底解説

    ユニオン(共用体)とは、異なるデータ型を持つ複数の変数が、同一のメモリ領域を共有するための仕組みです。構造体が各メンバーごとに独立したメモリを割り当てるのに対し、ユニオンではすべてのメンバーが同じアドレスを参照するという点が大きな特徴です。 ユニオンの構文 ユニオンを定義するときの基本的な書式は次の通りです。 union タグ名{ データ型 メンバー1; データ型 メンバー2; ---- ---- データ型 メンバーn; }; 実際の記述例を見てみましょう。 union sample{ int a; float b; char

  2. C言語のポインタ入門!宣言・初期化から配列アクセスの実例まで徹底解説

    ポインタ(pointer)とは、他の変数のメモリアドレスを格納するための変数です。C言語においてポインタは、メモリを直接操作したり、関数間でデータを効率的にやり取りしたりするために欠かせない重要な概念です。 ポインタの宣言・初期化とアクセス まず、次のような通常の整数変数の宣言を見てみましょう。 int qty = 179; 変数qtyには値「179」が格納されると同時に、メモリ上のどこかにその格納場所(アドレス)が割り当てられます。 ポインタの宣言 int *p; 「p」はポインタ変数であり、別の整数型(int)変数のアドレスを保持します。変数名の前にアスタリスク(*)を付けることで、「こ