構造体変数のアドレスをポインタ渡しすることによりゲームキャラの位置、ステータスデータを変更することができます ここでその仕組みを学んでいきましょう

構造体変数のメンバ変数に格納されている数値をポインタ変数をつかってprintf出力表示してみます

アレサ「今日のお題は


  構造体変数のメンバ変数に格納されている数値を

    ポインタ変数をつかってprintf出力表示してみます


となっています」


ソーラー「具体的にはどういうことなのかな?」


アレサ「はいっ 😊 ソーラーさん


それを説明するために


ここでは


例として


次のように構造体宣言を行い


構造体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


に格納されている数値を表示するには


printf("%d\n",cube1.no);

printf("%f\n" ,cube1.tate);

printf("%f\n" ,cube1.yoko);

printf("%f\n" ,cube1.takasa);


の命令文を実行すればよいのでした


そのプログラムは以下のようになります


#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void){


Cube cube1={1,7.0,7.0,7.0};


printf("%d\n" ,cube1.no);

printf("%f\n" ,cube1.tate);

printf("%f\n" ,cube1.yoko);

printf("%f\n" ,cube1.takasa);


return 0;

}


コンパイル結果

1

7.000000

7.000000

7.000000


このようにして


Cube型の構造体変数cube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1. takasa


に格納されている数値をprintf出力表示していました


今回は


Cube型の構造体変数cube1のメンバ変数


cube1. no

cube1.tate

cube1.yoko

cube1. takasa


に格納されている数値


1

7.0

7.0

7.0



ポインタ変数をつかって


printf出力表示してみようというわけです」


ソーラー「なあるほど~


構造体変数cube1のメンバ変数は数値を格納しているから


もちろん


その数値を格納している構造体変数cube1のメンバ変数のアドレス


つまり


その数値を格納しているメモリのアドレス


があると・・・」


アレサ「そうなのです」


ソーラー


「そのアドレス情報を使って


構造体変数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型の構造体変数cube1のアドレス


&cube1 を


格納できるポインタ変数を


次のようにポインタ変数宣言をおこない作製します。


Cube *pta;


(ここではptaがポインタ変数宣言されています。


ポインタ変数の名前はptaでもpttomatoでも何でも構いません)


構造体Cube型の構造体変数cube1のアドレスを格納する


ptaの


ポインタ変数宣言において


ポインタ変数ptaを格納する型は


構造体変数cube1が格納されているCube型と


同じCube型にするというきまりがあります。


Cube *pta;


を実行することにより


構造体変数cube1のアドレスを格納する


ポインタ変数


ptaが作製されますの」


ソーラー「おお 構造体変数cube1のアドレスを


格納するポインタ変数ptaか


構造体変数のアドレスを格納できるんだね。」


アレサ


「そうして 

ポインタ変数宣言

Cube *pta;

により

作製されたポインタ変数ptaに


構造体変数cube1のアドレス


&cube1を 代入します


pta=&cube1;


このとき


アドレス&cube1のメモリには


構造体変数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をつかってあらわすためには🍓



🍓構造体変数cube1のアドレスが格納されているポインタ変数ptaに🍓



    🍓🍓🍓アロー演算子->を用いて🍓🍓🍓



pta->no

pta->tate

pta->yoko

pta->takasa


と表記します


この

pta->no

pta->tate

pta->yoko

pta->takasa


が 構造体変数cube1のアドレスにある場所に格納されている数値


1

7.0

7.0

7.0

をあらわすというわけです。」



ソーラー

「早速


構造体変数cube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

に格納されている数値を表す


この

pta->no

pta->tate

pta->yoko

pta->takasa


をプログラムにつかってみよう😊」



アレサ「はいっ


そのプログラムは次のようになります」



#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;

int main(void)

{

Cube *pta;

Cube cube1={1,7.0,7.0,7.0};

pta=&cube1;

printf("%d\n" ,pta->no);

printf("%f\n" ,pta->tate);

printf("%f\n" ,pta->yoko);

printf("%f\n" ,pta->takasa);


return 0;

}


コンパイル結果

1

7.000000

7.000000

7.000000


アレサ

「やはり基本は


pta=&cube1;


ポインタ変数にアドレスcube1を渡すということですね


そうして


構造体変数cube1のアドレスが


ポインタ変数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

を表すことになり


printf("%d\n" ,pta->no);

printf("%f\n" ,pta->tate);

printf("%f\n" ,pta->yoko);

printf("%f\n" ,pta->takasa);

によって


コンパイル結果に

構造体変数cube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


のアドレスのメモリに格納されている数値


1

7.000000

7.000000

7.000000

が表示されたというわけです💖


こうして 今日のお題


 構造体変数のメンバ変数に格納されている数値を

  ポインタ変数をつかって表示してみることが


できましたですの。


ポイントは


🌞構造体変数cube1のアドレスが格納されているポインタ変数ptaに🌞


    アロー演算子->を用いるということですね


ソーラー「普通は


ポインタ変数ptaに格納されているアドレスのメモリに


保存されている数値は*ptaと表されるんだけど


構造体変数cube1のアドレスが


ポインタ変数ptaに格納された場合は


構造体変数cube1のアドレスのメモリに保存されている数値は


pta->no

pta->tate

pta->yoko

pta->takasa


と表されるんだね


かっこいいね。」

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

作者を応援しよう!

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

応援したユーザー

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