配列とポインタの違いとは?分かりやすく解説!

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


配列とポインタの主な違いは、配列が同じデータ型の要素の集まりを格納するデータ構造であるのに対し、ポインタはコンピュータのメモリ内の別の変数のアドレスを保持する変数であることです。

配列とポインターは、CやC++などのプログラミング言語で使用される2つの概念です。

配列は、同じデータ型の値を一定数だけ保持するデータの集合体です。

  例えば、10人の生徒の点数を格納するために、プログラマは10個の整数を格納できる配列を作成することができる。

一方、ポインターは、他の変数のアドレスを保持する変数です。

  ポインターは、メモリにアクセスしたり、メモリアドレスを操作したりするのに役立ちます。

スポンサーリンク

配列とは

配列は、同じ型の固定数の要素を格納するデータ構造です。

配列のすべての要素は、連続したメモリ位置にあります。


50個の整数の値を格納する必要があるとします


各整数に対して変数を作成することも可能ですが、困難であり、より時間がかかります

この問題を解決するために、配列を使用することができる。

int numbers[50];

上の例では,50個の整数を格納できるnumbersという配列が確保されます.配列の特定の要素は、インデックスを使って評価することができます。

配列には50個の要素があるので、最後の要素はインデックス49を持ちます。

numbers[1] = 30;

上記の記述により、numbers配列の1番目のインデックスに値30が代入されます。

さらに、他のデータ型の配列も作成することができます。

たとえば、double average[10];と記述すると、averageという配列が作成されます。

これは10個のdouble値を格納することができます。

配列は作成が簡単で、要素にアクセスするのも簡単です。

一方、配列はサイズが固定されています。

配列のサイズが10であれば、20個の要素を格納するために使用することはできません。

つまり、配列のメモリ割り当ては固定的なのです。

ポインターとは

変数とは、ある値を格納するためのメモリ上の位置のことです。

すべてのメモリ領域は、それを識別するためのアドレスを持っています。

図2:ポインタ

ポインターは、他の変数のアドレスを格納する変数です。

ポインターは変数のアドレスを格納する前に宣言されます。

ポインタの宣言には、アスタリスクの”Ⓐ”を使用します。

int *ptr;

ptr は整数型変数へのポインタです。

double *ptr1;

ptr1 は double 変数へのポインタです。

以下のコードを参照してください。

Main Difference - Array vs Pointer 図3: ポインターを使用したプログラム

変数aには値20が格納されています。

ptrは整数へのポインタです。

8行目で変数aのアドレスが代入され、ptrはaを指しています。

したがって、ptrが指す値を表示すれば、aの値が表示されます。

代入するアドレスがない場合、ポインタにNULL値を代入することができます。

このようなポインタをヌルポインタと呼びます。

int *ptr = NULL;

配列とポインタの関係

以下のプログラムを参照してください。

arrという配列があります.この配列には5つの整数が含まれている.ptrは整数へのポインタです。

8行目でarrはptrに代入されています.したがって、ptrは配列の0番目のインデックス要素を指していることになります。

ptrの値を表示すると、0番目のインデックス要素の値が表示されます。

それは10です。

配列とポインタの違い

定義

配列は、それぞれが配列のインデックスで識別される要素のコレクションで構成されるデータ構造です。

ポインターは、コンピュータのメモリにある別の値のメモリアドレスを格納するプログラミング言語のオブジェクトです。

基本情報

配列がデータ要素の集合を指すのに対して、ポインタは他のメモリ位置を指す変数です。

構文

配列構文 – データ型 arrayName [データ型];

Pointer syntax – data type * variable_name;

使用方法

配列は固定サイズのメモリ(静的メモリ)の割り当てに使用できますが、ポインタは動的メモリ の割り当てに使用できます。

結論

配列とポインタという2つの用語は、プログラミングの概念です。

配列とポインタの違いは、配列が同じデータ型の要素の集まりを格納するデータ構造であるのに対し、ポインタはコンピュータのメモリ内の別の変数のアドレスを保持する変数であることです。

タイトルとURLをコピーしました