<1次元配列とアドレス>

 

 「変数名だけだと変数の値を示し(例:x)、変数名の前に&をつけるとアドレスを示す(例:&x)」というのが通常の変数の約束です。

 

 配列の場合も、「配列名に添字をつけると要素の値を示し(例:data[2])、それに&つけたものは(例:&data[2])その要素のアドレスを示す」ことになります。

 

 通常の変数と異なるのは、「配列名だけだと、その配列の先頭要素のアドレスを示す」という点です。つまり、配列dataについて、data&data[0]は同じになります。

 

 まとめると、

 

配列名

配列の先頭要素アドレスを示す

配列名[添字]

配列の要素の値を示す

&配列名[添字]

配列の要素のアドレスを示す

 

(例)   char str1[4]="ABC";

         // str1         str1の先頭要素のアドレス(例えば0x4000

         // str1[0]      str1[0]の値('A'

         // str1[1]      str1[1]の値('B'

         // str1[2]      str1[2]の値('C'

         // str1[3]      str1[3]の値('\n'

         // &str1[0]     str1[0]のアドレス(0x4000

         // &str1[1]     str1[1]のアドレス(0x4001

         // &str1[2]     str1[2]のアドレス(0x4002

         // &str1[3]     str1[3]のアドレス(0x4003

 

(例)   char str1[10], str2[256];

         scanf("%c", &str1[0]);         // str1[0]に文字入力

         scanf("%s", str2);              // str2に文字列入力

 

 

<2次元配列とアドレス>

 

 2次元配列のアドレスについては、以下のようになります。

 

配列名

配列の先頭要素のアドレス

配列名[]

行の先頭要素のアドレス

配列名[][]

配列要素の値

&配列名[][]

配列要素のアドレス

 

(例)   char str2[3][7] = {

                 "ABC", "DEFGHI", "JK"

                 };

// str2                  str2の先頭要素のアドレス(例えば0x4000

// str2[0]              str2[0]の先頭要素のアドレス(0x4000

// str2[1]              str2[1]の先頭要素のアドレス(0x4007

// str2[2]              str2[2]の先頭要素のアドレス(0x400E

// str2[0][0]           str2[0][0]の中身('A'

// str2[1][0]           str2[1][0]の中身('D'

// str2[2][0]           str2[2][0]の中身('J'

// &str2[0][0]          str2[0][0]のアドレス(0x4000

// &str2[1][0]          str2[1][0]のアドレス(0x4007

// &str2[2][0]          str2[2][0]のアドレス(0x400E

 

 3次元以上の多次元配列についても、同様の考え方で拡張されます。

 

 

戻る