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

C言語の配列へのポインタとは?基本構文とサンプルコードをわかりやすく解説

ポインタの基本

ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数です。変数にメモリが割り当てられると、ポインタはその変数のアドレスを指します。ポインタ変数の宣言には単項演算子「*」が使用され、これにより割り当てられたメモリのアドレスを扱えるようになります。配列へのポインタは、配列変数が占めるメモリブロックの先頭アドレスを指します。

配列ポインタの構文

配列ポインタは、次の構文で宣言します。

datatype *variable_name[size];

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

  • datatype − int、char、float など、変数のデータ型を指定します。
  • variable_name − ユーザーが自由に決められる変数名です。
  • size − 配列変数のサイズ(要素数)です。

サンプルプログラム

以下は、配列ポインタの動作を確認するサンプルプログラムです。

コード例

#include <stdio.h>
int main () {
    int *arr[3];
    int *a;
    printf( "配列ポインタ変数の値 : %d\n", arr);
    printf( "ポインタ変数の値 : %d\n", &a);
    return 0;
}

実行結果

配列ポインタ変数の値 : 1481173888
ポインタ変数の値 : 1481173880

プログラムの解説

上記のプログラムでは、まず要素数3のポインタ配列 *arr と、整数型へのポインタ *a を宣言しています。

int *arr[3];
int *a;

続いて、printf関数を使って、それぞれのポインタが保持するアドレスの値を出力しています。

printf( "配列ポインタ変数の値 : %d\n", arr);
printf( "ポインタ変数の値 : %d\n", &a);

実行結果に表示される数値は実行環境によって異なります。これは、メモリアドレスがOSやその時点のメモリの状態に応じて割り当てられるためです。

補足:ポインタの配列と配列へのポインタの違い

なお、int *arr[3] は厳密には「int型へのポインタを3つ格納する配列(ポインタ配列)」を表します。一方、いわゆる「配列へのポインタ」を宣言する場合は、int (*arr)[3] のように括弧を付けます。両者は見た目が似ていますが、意味がまったく異なるため、混同しないよう注意しましょう。

  1. C言語入門:ポインタ配列とポインタへのポインタ(二重ポインタ)の基本をわかりやすく解説

    はじめにC言語において、ポインタはメモリを直接扱える強力な機能です。本記事では、その応用形である「ポインタ配列」と「ポインタへのポインタ(二重ポインタ)」について、宣言方法・初期化方法・値へのアクセス方法を、サンプルコードと実行結果とともに順を追って解説します。 ポインタ配列とは通常の変数と同様に、ポインタも配列として宣言することができます。これを「ポインタ配列」と呼びます。各要素がそれぞれ別のアドレスを保持できるため、複数のデータを間接的に扱う際に便利です。 宣言方法データ型 *ポインタ名 [サイズ];例えば、次のように宣言します。int *p[5]; // int型の要素アドレスを5つ格納

  2. C言語のポインタ配列とは?宣言・初期化・アクセス方法を実例付きで解説

    ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための変数です。C言語においてポインタは非常に重要な概念であり、メモリを直接操作することで効率的なプログラムを作成できます。 ポインタの特徴 メモリ空間を節約できる メモリ位置へ直接アクセスするため、実行速度が速い メモリを効率的に利用でき、動的な割り当て(確保)と解放が可能 リンクリストやツリーなどのデータ構造と組み合わせて使用できる ポインタの宣言と初期化 まず、次のような文を考えてみましょう。 int qty = 179; このとき、変数はメモリ上に値「179」とそのアドレスを持つ形で表現されます。 ポインタの宣言 ポ