今回は、添字演算子[ ]について理解を深めよう。
ポインタpと整数iを加算したものに間接演算子*を適用した間接式*(p + i )についてみていこう。
( )内は、pとiの加算である。したがって、算術型の値どうしと同様、p + i とi + pは等価である。
すると、*(p + i)と*(i + p)も同じということになる。
実は、配列要素をアクセスする式p[ i ]も、i[ p ]と記述することが可能なのである。
添字演算子[ ] は、二つのオペランドを持つ2項演算子である。
オペランドの一方の型は、
Type型のオブジェクトへのポインタ
であり、他方の型は、
整数型
である。生成する値の型は
Type型である。
添字演算子[ ]のオペランドの順序は任意である。
すなわち、a[ 3 ] と3[ a ]は同じなのである。
次のプログラムで確認しよう。
「添字演算子と間接演算子」の働きを確認するプログラムである。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.90.0)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0でコンパイルしている。
//添字演算子と間接演算子
#include <stdio.h>
int main(void)
{
int a[4];
0[a]= a[1] = *(a + 2) = *(3 + a ) = 8;
for (int i = 0; i < 4; i++)
printf("a[%d] = %d\n",i,a[i]);
return 0;
}
実行結果
a[0] = 8
a[1] = 8
a[2] = 8
a[3] = 8
配列aの4個の要素すべてに8を代入・表示している。
(参考) 新・明解C言語 入門編 第2版 柴田 望洋 (著)SBクリエイティブ
コメント