配列に数値を格納した場合の配列や配列変数のアドレスはどうなっているのでしょうか?調べてみます。
てんC「ソーラーさん、
配列int hairetu[3]={1,2,3};
によって生成される
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
のアドレスを格納しているポインタ変数が
hairetu
hairetu+1
hairetu+2
とわかったところで
配列変数
hairetu[0]
hairetu[1]
hairetu[2]
のアドレスをしらべてみましょう。
ここでおさらいすると・・・」
ソーラー「お皿洗いすると・・・」
てんC「・・・」
ソーラー「・・・つづきをお願い・・・」
てんC「はいっ😊ソーラーさん
配列宣言
int hairetu[3]={1,2,3};
が行われた時点で
ポインタ変数hairetuにはすでに
整数値データ1を格納したhairetu[0]のアドレス
&hairetu[0]が格納されていました。
ポインタ変数hairetu+1にはすでに
整数値データ2を格納したhairetu[1]のアドレス
&hairetu[1]が格納されていました。
ポインタ変数hairetu+2にはすでに
整数値3を格納したhairetu[2]のアドレス
&hairetu[2]が格納されていました。
ですのでhairetu[0]のアドレスを表示するためには
cout<<hairetu<<"\n";
と記述し
hairetu[1]のアドレスを表示するためには
cout<<hairetu+1<<"\n";
と記述し
hairetu[2]のアドレスを表示するためには
cout<<hairetu+2<<"\n";
と記述し
命令文を実行すればよいわけですね。ソーラーさん」
ソーラー「そうだね。
どんなふうに
連続したint型の配列変数
hairetu[0]
hairetu[1]
hairetu[2]
の
アドレスが表示されるか
ちょっと実験するのもいいかもしれない。
プログラムを構成して・・」
#include <iostream>
using namespace std;
int main() {
int hairetu[]={1,2,3};
cout<<hairetu<<"\n";
/*(hairetu[0]のアドレスを表示します)*/
cout<<hairetu+1<<"\n";
/*(hairetu[1]のアドレスを表示します)*/
cout<<hairetu+2<<"\n";
/*(hairetu[2]のアドレスを表示します)*/
return 0;
}
ソーラー「ビルドっっと😊」
ビルド実行結果
00CFFCAC
00CFFCB0
00CFFCB4
ソーラー 「どうやら
hairetu[0]
hairetu[1]
hairetu[2]
のアドレスは隣同士のようだね。
?
0019FF50の次は0019FF51じゃないかって?
整数値データ1は
int型(4バイト)の
配列変数hairetu[0]に格納されています
つまり
整数値データ1は4バイトの領域にわたってデータが格納されています。
つまり
(4バイト=)1バイトのお部屋4つ分にわたって
00000000 00000000 00000000 00000001
と
データが格納されています。
コンピュータはメモリの1バイトのお部屋ごとにアドレスをつけているので
整数値データ1を格納しているint型の配列変数hairetu[0]は
00CFFCACを先頭に
00CFFCAC
00CFFCAD
00CFFCAE
00CFFCAF
のアドレス番号の
4つのお部屋をもち
数値1のデータは この4つのお部屋にまたがって
00000000 00000000 00000000 00000001
👆 👆 👆 👆
1バイト 1バイト 1バイト 1バイト
と格納されています
(16進数で0019FF4Fの次の数値は0019FF50となります。
solarplexussより)
数値2を格納しているint型の配列変数hairetu[1]
は00CFFCB0を先頭に
00CFFCB0
00CFFCB1
00CFFCB2
00CFFCB3
のアドレス番号がついた
4つのお部屋をもち
数値2のデータは この4つのお部屋にまたがって
00000000 00000000 00000000 00000010
👆 👆 👆 👆
1バイト 1バイト 1バイト 1バイト
と格納されています
数値3を格納しているint型の配列変数hairetu[2]
は00CFFCB4を先頭に
00CFFCB4
00CFFCB5
00CFFCB6
00CFFCB7
のアドレス番号の
4つのお部屋をもつことになるんだね(^_-)-☆パチっ」
てんC「
配列変数hairetu[0]
配列変数hairetu[1]
配列変数hairetu[2]
はデータを格納するお部屋を4つもっていても
その先頭のアドレスしか表示されないのですね。」
ソーラー「そうだねぇ~ほんとだね。
配列hairetuに格納されているすべての
お部屋のアドレスは
00CFFCAC
00CFFCAD
00CFFCAE
00CFFCAF
00CFFCB0
00CFFCB1
00CFFCB2
00CFFCB3
00CFFCB4
00CFFCB5
00CFFCB6
00CFFCB7
となってるよ
hairetu[0]のアドレスをもとめたときは
先頭の00CFFCACが表示されたよね
そしてなおかつ
アドレス00CFFCACは
配列hairetuが格納している全アドレス
00CFFCAC
00CFFCAD
00CFFCAE
00CFFCAF
00CFFCB0
00CFFCB1
00CFFCB2
00CFFCB3
00CFFCB4
00CFFCB5
00CFFCB6
00CFFCB7
の先頭のアドレスになっているよね
つまり
ポインタ変数hairetuに格納されている
hairetu[0]の
アドレス00CFFCACは
配列hairetuの先頭のアドレスであり
配列hairetuを代表するアドレスといえるんじゃな~い😊かな」
てんC「確かに
cout<<hairetu<<"\n";
/*hairetu[0]に格納されているアドレスを表示する*/
を実行すれば
hairetu[0]のアドレスがわかります
配列hairetuは
hairetu[0]のアドレスのメモリから数値を格納しはじめているのです。」
🐦 🐦
実際に
cout<<hairetu<<"\n";ってかくと
hairetu[0]のアドレスを表示しているんだけど
配列hairetuのアドレスを表示していることにもなります
solarplexussより
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます