構造体変数のメンバ変数に格納されている数値データをポインタ変数をつかってcout出力表示してみます
てんC「今日のお題は
構造体変数のメンバ変数に格納されている数値データを
ポインタ変数をつかってcout出力表示してみます
となっています」
ソーラー「具体的にはどういうことなのかな?」
てんC「はいっ 😊 ソーラーさん
それを説明するために
ここでは
例として
次のように構造体宣言を行い
構造体Cubeを設定します
typedef struct Cube{
int no;
float tate;
float yoko;
float takasa;
}Cube;
そしてcube1のCube型の構造体変数宣言を行います
Cube cube1;
👆のような表記方法でした。
このCube型の構造体変数cube1を初期化するには
Cube型の構造体変数cube1のメンバ変数
cube1. no
cube1.tate
cube1.yoko
cube1. takasa
に
数値データ
1
7.0
7.0
7.0
を直接1つずつ
cube1. no=1;
cube1.tate=7.0;
cube1.yoko=7.0;
cube1. takasa=7.0;
のように代入して初期化する方法と
Cube cube1={1,7.0,7.0,7.0};
のように
簡略化された方法で初期化する方法とがあります
そして
Cube型の構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データを表示するには
cout << cube1.no << "\n";
cout << cube1.tate << "\n";
cout << cube1.yoko << "\n";
cout << cube1.takasa << "\n";
の命令文を実行すればよいのでした
そのプログラムは以下のようになります
#include <iostream>
using namespace std;
typedef struct Cube {
int no;
float tate;
float yoko;
float takasa;
}Cube;
int main() {
Cube cube1 = { 1,7.0,7.0,7.0 };
cout << cube1.no << "\n";
cout << cube1.tate << "\n";
cout << cube1.yoko << "\n";
cout << cube1.takasa << "\n";
return 0;
}
ビルド実行結果
1
7
7
7
このようにして
Cube型の構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1. takasa
に格納されている数値データをcout出力表示していました
今回は
Cube型の構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データ
1
7.0
7.0
7.0
を
ポインタ変数をつかって
cout出力表示してみようというわけです」
ソーラー「なあるほど~
構造体変数cube1のメンバ変数は数値データを格納しているから
もちろん
その数値データを格納している構造体変数cube1のメンバ変数のアドレス
つまり
その数値データを格納しているメモリのアドレス
があると・・・」
てんC「そうなのです」
ソーラー
「そして、そのアドレス情報を使って
構造体変数cube1のメンバ変数
cube1. no
cube1.tate
cube1.yoko
cube1. takasa
に格納されている数値データ
1
7.0
7.0
7.0
を表示したい場合
そのcube1のメンバ変数である
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
のアドレスを格納するポインタ変数が
必要になってくるってことかな
アドレスを格納しているポインタ変数さえわかれば
そのアドレスのメモリに格納されている数値も分かりそうな気がするね。」
てんC
「はい
そこで
構造体Cube型の構造体変数cube1のアドレス
&cube1を
格納できるポインタ変数を
次のようにポインタ変数宣言をおこない作製します。
Cube* pta;
(ここではptaのCube*型のポインタ変数宣言が実行されています
ポインタ変数の名前はptaでもpttomatoでも何でも構いません)
構造体Cube型の構造体変数cube1のアドレス&cube1を格納する
ptaの
ポインタ変数宣言において
ポインタ変数ptaを格納する型は
構造体変数cube1が格納されているCube型にアスタリスク*をつけた
Cube*型にするというきまりがあります。
ちょうど
int型の変数aのアドレス&aを格納する
ptaの
ポインタ変数宣言において
ポインタ変数ptaを格納する型は
int型の変数aが格納されているint型にアスタリスク*をつけた
int*型にするのと仕組みは同じです
Cube* pta;
を実行することにより
構造体変数cube1のアドレス&cube1を格納する
ポインタ変数
ptaが作製されます」
ソーラー「おお 構造体変数cube1のアドレス&cube1を
格納するCube*型のポインタ変数ptaか
Cube型の構造体変数のアドレスを格納できるんだね。」
てんC
「そうして
Cube*型のポインタ変数宣言
Cube* pta;
の実行により
作製されたポインタ変数ptaに
構造体変数cube1のアドレス
&cube1を次のように
pta=&cube1;
代入します
このとき
構造体変数cube1は
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
全体のメモリを管理しており
構造体変数cube1のアドレス&cube1は
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
を代表するアドレスとなっています
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
には数値データ
1
7.0
7.0
7.0
が
格納されています
その
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
格納されている数値データを
🍓Cube*型のポインタ変数ptaをつかってあらわすためには🍓
🍓Cube*型のポインタ変数ptaに構造体変数cube1のアドレス&cube1を代入し🍓
🍓構造体変数cube1のアドレスが格納されているポインタ変数ptaに🍓
🍓🍓🍓アロー演算子->を用いて🍓🍓🍓
pta->no
pta->tate
pta->yoko
pta->takasa
と表記します
この
pta->no
pta->tate
pta->yoko
pta->takasa
が 構造体変数cube1が管理しているメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の
メモリに格納されている数値データ
1
7.0
7.0
7.0
をあらわすというわけです。
いいかえると
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
を代表する構造体変数cube1のアドレス&cube1が代入された
Cube*型のポインタ変数ptaにアロー演算子->を用いた
pta->no
pta->tate
pta->yoko
pta->takasa
は
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に
格納されている数値データ
1
7.0
7.0
7.0
をあらわすというわけです。」
ソーラー
「早速
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データを表す
この
pta->no
pta->tate
pta->yoko
pta->takasa
をプログラムにつかってみよう😊」
てんC「はいっ
そのプログラムは次のようになります」
#include <iostream>
using namespace std;
typedef struct Cube{
int no;
float tate;
float yoko;
float takasa;
}Cube;
int main()
{
Cube *pta;
Cube cube1={1,7.0,7.0,7.0};
pta=&cube1;
cout<<pta->no<<"\n";
cout<<pta->tate<<"\n";
cout<<pta->yoko<<"\n";
cout<<pta->takasa<<"\n";
return 0;
}
ビルド実行結果
1
7
7
7
てんC
「やはりはポイントは
pta=&cube1;
を実行し
Cube*型のポインタ変数ptaにアドレス&cube1を渡すということですね
そのようにして
構造体変数cube1のアドレス&cube1が
Cube*型のポインタ変数ptaに格納されることにより
pta->no
pta->tate
pta->yoko
pta->takasa
は
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
のアドレスのメモリに格納された数値データ
1
7.0
7.0
7.0
を表すことになり
cout << pta->no << "\n";
cout << pta->tate << "\n";
cout << pta->yoko << "\n";
cout << pta->takasa << "\n";
によって
ビルド実行結果に
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
のアドレスのメモリに格納されている数値
が
1
7
7
7
として表示されたというわけです💖
こうして 今日のお題
構造体変数のメンバ変数に格納されている数値データを
ポインタ変数をつかって表示してみることが
できました
ポイントは
🌞構造体変数cube1のアドレスが格納されているCube*型のポインタ変数ptaに🌞
アロー演算子->を用いるということですね。
」
ソーラー「普通は
ポインタ変数ptaに格納されているアドレスのメモリに
保存されている数値データは*ptaと表されるんだけど
構造体変数cube1のアドレスが
Cube*型ポインタ変数ptaに格納された場合は
構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データは
pta->no
pta->tate
pta->yoko
pta->takasa
と表されるんだね
かっこいいね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます