第6章  E仕様書−配列とポインター
RPGプログラマーの為のC言語講座

C言語では配列とポインターは非常によくにています。配列の添え字を使って行えることは、ポインターを使ってもできます。

それでは、まず、ポインターについて少しおさらいしましょう。

ポインターとは、何かを指している変数です。
定義の方法は、

char *A;

この様に、変数の前に*(間接演算子)を付けて定義します。型を表すchar,int付きで定義するのは、ポインターが指している ところに、定義したデータ型のデータを置くということを表します。

char *A ="ABCDE;

この場合は、Aと言うポインターに、文字列"ABCDE"のアドレスが初期値として入ります。

ポインター
*A
文字列 "ABCDE"
0x2001
...
A
B
C
D
E
\0
メモリー
アドレス
0x1234
...
0x2001
0x2002
0x2003
0x2004
0x2005
0x2006
↓________________________________↑

ポインターAには、0x2001というメモリーアドレスが入っています。 注.実際のAS/400のポインターは128bit(16byte)です。
0x2001には'A'と言う文字が置いてあります。ポインターは、この'A'と言う文字を指しています。

配列の場合は

char A[6] = "ABCDE" ;

配列は、”型名 配名[配列の要素の数];”です。

配列A
A
B
C
D
E
\0


C言語
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]

このように配列は、連続した要素の並びになっています。
ここで、この配列を差すポインターを考えてみましょう。

char *p;
char A[6] = "ABCDE" ;
p = &A[0]; /* p = A ;でも同じ意味 */

ポインター
*p
配列 A
0x2001
...
A
B
C
D
E
\0
メモリー
アドレス
0x1234
...
0x2001
0x2002
0x2003
0x2004
0x2005
0x2006
配列 A
...
A[0]
A[1]
A[2]
A[3]
A[4]
A[5]
ポインター*p
...
*p
*(p+1)
*(p+2)
*(p+3)
*(p+4)
*(p+5)
↓________________________________↑