C言語では配列とポインターは非常によくにています。配列の添え字を使って行えることは、ポインターを使ってもできます。
それでは、まず、ポインターについて少しおさらいしましょう。
ポインターとは、何かを指している変数です。
定義の方法は、
char *A;
この様に、変数の前に*(間接演算子)を付けて定義します。型を表すchar,int付きで定義するのは、ポインターが指している
ところに、定義したデータ型のデータを置くということを表します。
char *A ="ABCDE;
この場合は、Aと言うポインターに、文字列"ABCDE"のアドレスが初期値として入ります。
|
ポインター *A |
文字列 "ABCDE" |
値 |
|
メモリー アドレス |
0x1234 |
... |
0x2001 |
0x2002 |
0x2003 |
0x2004 |
0x2005 |
0x2006 |
|
|
↓________________________________↑
|
ポインターAには、0x2001というメモリーアドレスが入っています。
注.実際のAS/400のポインターは128bit(16byte)です。
0x2001には'A'と言う文字が置いてあります。ポインターは、この'A'と言う文字を指しています。
配列の場合は
char A[6] = "ABCDE" ;
配列は、”型名 配名[配列の要素の数];”です。
|
配列A
|
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 |
値 |
|
メモリー アドレス |
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) |
|
|
↓________________________________↑
|
|