構造体変数のメンバ変数に格納されている数値データをポインタ変数をつかって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


と表されるんだね


かっこいいね。」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る