【課題3−6 アドレス】
<アドレスとは>
メモリ中の位置を示す「番地」.1バイトごとに番号がふられる.
<変数とアドレス>
(例) int
a = 123;
aは変数の値(123)を示し,&aは変数aのアドレス(例えば0xbb40)を示す.アンパサンド(&)はアドレス演算子といい,変数のアドレスを取り出す.
(例) int
a;
scanf("%d",
&a);
scanfの引数のように,その関数によって中身に値が格納されて返ってくるような引数には,変数のアドレスやポインタを使う.
<1次元配列とアドレス>
配列名 |
配列の先頭要素�フアドレスを示す |
配列名[添字] |
配列の要素の値を示す |
&配列名[添字] |
配列の要素のアドレスを示す |
(例) 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次元配列とアドレス>
配列名 |
配列の先頭要素のアドレス |
配列名[行] |
行の先頭要素のアドレス |
配列名[行][列] |
配列要素の値 |
&配列名[行][列] |
配列要素のアドレス |
(例) 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)