ポインタと配列 · 1 min read · Nov 18, 2025
Linux Cプログラミングチュートリアル パート19: ポインタと配列

これまでのCプログラミングチュートリアルシリーズでは、ポインタの基本について簡単に説明しました。しかし、まだいくつかのポインタに関連する概念について話す必要があります。そこで、このチュートリアルでは、ポインタと配列の概念について説明します。
ポインタと配列を始める前に、ポインタ自体の基本概念を簡単に復習しましょう。ポインタは、アドレスを保持できる特別な種類の変数です。たとえば、文字へのポインタ ‘ptr’ は次のように宣言できます;
char *ptr;そして、アンパサンド記号を使用してアドレスを格納できます。以下はその例です:
char c = 'a';
ptr = &c;これで、ポインタ ‘ptr’ は変数 ‘c’ のアドレスを含んでいます。別の言い方をすれば、’ptr’ は今や変数 ‘c’ を指しています。
ポインタが指している変数の値にアクセスまたは操作するには、* 演算子を使用できます。たとえば、変数 c の値を ‘a’ から ‘b’ に変更するには、次のようにポインタ ‘ptr’ を使用します:
*ptr = 'b';以下のプログラムは、これまでに説明した基本的なポインタの概念をよりよく理解するのに役立ちます:
#include
int main()
{
char c = 'a';
char *ptr = &c;
*ptr = 'b';
printf ("variable c = %c", c);
return 0;
} このプログラムの出力は次のとおりです:
variable c = bポインタを使用することで、変数の値が変更されたことがわかります。
ポインタと配列
Cコードの作成と読み取りに多くの時間を費やすにつれて、ポインタと配列がしばしば一緒に使用されることに気付くでしょう。たとえば、ポインタを使用して配列の個々の要素にアクセスできます。次のコードを考えてみましょう:
...
...
...
char arr[] = {'a','b','c','d','e'}
char *ptr;
ptr = &arr[0]
...
...
...ここで、ポインタ ‘ptr’ は配列 ‘arr’ の最初の要素を指しています。インデックスの観点から言えば、配列の位置0にあります。今、ポインタ ‘ptr’ を使って * 演算子を使用して、ポインタが指している値にアクセス/操作できます。
次に、配列の最初の要素を指すポインタを持つと、配列の他の要素にも簡単にアクセスできます。たとえば、上記のコードの文脈で、次の式をどこかで使用すると:
*(ptr+1)これにより、配列の2番目の要素にアクセスできます。通常は次のように使用します:
arr[1] したがって、実際には ‘ptr’ に1を加えることで、配列の次の要素のアドレスに移動し、* を使用してそのアドレスに格納されている値にアクセスできます。同様に、2を加えると3番目の要素に移動します…このように続きます。
以下のプログラムは、今説明したことをより明確に理解するのに役立つはずです:
#include
int main()
{
char arr[] = {'a','b','c','d','e'};
char *ptr = &arr[0];
for(int i=0;i そして、出力は次のとおりです:
arr[0] is a
arr[1] is b
arr[2] is c
arr[3] is d
arr[4] is eしたがって、’*(ptr+i)’ という式 - i が0から配列の最後のインデックスまで変化する - により、配列のすべての要素にアクセスできることがわかります。
注意1: コード内で使用される配列の名前は、配列の基底アドレスを提供します。これは、配列の名前とその最初の要素のアドレスが同じであることを意味します。したがって、配列 ‘arr’ の文脈では、’&arr[0]’ と ‘arr’ は同じことです。これは他の要素にも拡張され、&arr[2] は (arr+2) と書くこともできます。
注意2: 上記の注意で説明したことを拡張すると、すべての配列要素の表現はポインタ表現に分解できます。たとえば: arr[2] は ‘*(arr + 2)’ と同じです。
注意3: 配列のアドレスをポインタに割り当てることはできますが、その逆は無効です。また、ポインタとは異なり、配列名に ++ または – 演算子を使用することはできません。一般的に言えば、配列要素が元々位置しているアドレスを変更することはできません。
結論
このチュートリアルでは、ポインタと配列の概念、彼らがどのように関連しているか、そしてポインタを通じて配列要素にアクセスする方法に焦点を当てました。最後に、ポインタを使用する配列に関する重要なポイントについても説明しました。
これらの概念をローカルで試して、これらのことがどのように機能するかをよりよく理解し、疑問や質問がある場合は、下にコメントを残してください。
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。