main関数内で定義された構造体変数を自作関数内で定義された構造体変数に代入する・・・構造体変数の値渡し  マックス達はバカンスしています

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


次へとすすんでいきますよ。」


ソーラー「順調じゃないかっ😝


もう この調子で


すすめるだけ 進んじゃえ\(^o^)/😆」


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



先ほどのプログラムを改良し


main関数内で定義された構造体変数に格納された数値が


自作関数内で定義された構造体変数に値渡しされる様子を


もう1度 次のプログラムでみていきます。」


ソーラー「値渡しって前のエピソードでもでてきたやつだね。


main関数内で定義された構造体変数から


自作関数内で定義された構造体変数への


        🐙 値渡し ポインタ渡しに 🐙



           注目ってわけだね。」



#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;


void Cubedata2baiHyouji(Cube a){


a.no= a.no*2;

a.tate= a.tate*2;

a.yoko= a.yoko*2;

a.takasa= a.takasa*2;

/*ここでCube aに代入された


構造体変数の各メンバ変数の数値を2倍にします。*/


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

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

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

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

/*2倍になったメンバ変数の値を表示します。*/

}


int main(void)

{


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


Cubedata2baiHyouji(cube1);


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

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

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

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


return 0;

}

コンパイル結果

2

14.000000

14.000000

14.000000

1

7.000000

7.000000

7.000000


アレサ

「このプログラムでは


自作関数のCubedata2baiHyouji(Cube a)の引数に


Cubedata2baiHyouji(cube1);と


main関数内で定義された


Cube型の構造体変数cube1が代入されています


このとき


実引数cube1のメンバ変数から自作関数の仮引数である


Cube型の構造体変数 aのメンバ変数である


a.no

a.tate

a.yoko

a.takasa


に数値

1

7.0

7.0

7.0


が値渡しされています


つまり

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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が持っている


数値データ

1

7.0

7.0

7.0

だけが


構造体変数aの各メンバ変数


a.no

a.tate

a.yoko

a.takasa


に代入されており


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


のアドレス情報を


自作関数の引数にポインタ変数を設定して


渡しているわけではありません。


この方式は参照渡しではないですの。


構造体変数cube1のアドレスをわたさなければ


ポインタ変数を使って


構造体変数cube1のアドレス内にあるデータを


変更することはできません。


ですので


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



cube1のアドレス情報を格納したポインタ変数が


つかわれていない自作関数


Cubedata2baiHyouji(cube1);


が実行されても


影響をうけることがなく


cube1.no

cube1.tate

cube1.yoko

cube1.takasaに格納されている数値は


cube1.no=1

cube1.tate=7.0

cube1.tate=7.0

cube1.tate=7.0


のままとなります


その一方で


自作関数Cubedata2baiHyouji(Cube a)の


引数であるCube aの


各メンバ変数


a.no

a.tate

a.yoko

a.takasa


に渡された


🌞数値データ

1

7.0

7.0

7.0

だけは


自作関数 Cubedata2baiHyouji

《引数に代入された構造体変数の各メンバ変数2倍にする自作関数です》


の操作により


2倍されて


コンパイル結果は

2

14.000000

14.000000

14.000000

が表示されています」


ソーラー「ははっ


アレサっ 僕にも復唱させてよ


値渡し、ポインタ渡しのことがだいぶわかってきたんだ


もう1回繰り返すと


このプログラムで注目すべき点は


↑ ↑ ↑上記のように


Cubedata2baiHyouji(cube1);


が実行されても


その次に書かれた4つの命令文


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

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

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

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


によって表示される

main関数で定義された

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

1

7.0

7.0

7.0

のまま


2倍となっていないことにあります。


自作関数Cubedata2bai(cube1);により


main関数で定義された構造体変数cube1の各メンバ変数が


格納している数値データは2倍になりそうなものですが・・・」


solarplexuss「私も復唱させてぇ💖



🌳🌳🌳

cube1のメンバ変数の数値データは2倍になりそうなものですが・・・


の意味は



つまり

自作関数の中身の⇩

void ChangeCubedata2bai(Cube a){


a.no= a.no*2;

a.tate= a.tate*2;

a.yoko= a.yoko*2;

a.takasa= a.takasa*2;

/*ここで各メンバ変数の値を2倍しています。*/


この部分ですね。


ここで


仮引数である構造体変数 aに


ChangeCubedata2bai(cube1)



実引数cube1を代入することにより



cube1.no= cube1.no*2;

cube1.tate= cube1.tate*2;

cube1.yoko= cube1.yoko*2;

cube1.takasa= cube1.takasa*2;


が実行され


実引数cube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasaに格納されている値が


2倍になる


つまり


実引数である構造体変数cube1のメンバ変数に格納されている値が

2

14.000000

14.000000

14.000000


になるかも💖


しれないということですね。


ですが


そのようなことは起こりません。


なぜなら

構造体変数aには

cube1が代入されるのではなく

cube1のメンバ変数に格納されている数値のみがわたされるので

そもそも

cube1.no= cube1.no*2;

cube1.tate= cube1.tate*2;

cube1.yoko= cube1.yoko*2;

cube1.takasa= cube1.takasa*2;

は実行されません


実引数である構造体変数cube1のメンバ変数に格納されている数値を


仮引数である構造体変数aのメンバ変数に代入し


自作関数で 数値だけにいくら操作を加えても


実引数である構造体変数cube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


に格納されている数値は


cube1.no=1

cube1.tate=7.0

cube1.tate=7.0

cube1.tate=7.0

のまま変化しません


よって


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

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

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

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


コンパイル結果は


1

7.000000

7.000000

7.000000

となります

                   solarplexussより

🌳🌳🌳



アレサ「🌳🌳🌳のなかの説明どうりですね。


ソーラーさん」


ソーラー「そう そうして


main関数内で定義された


実引数であるCube型の構造体変数cube1を


自作関数内で定義された


仮引数であるCube型の構造体変数 aに


代入して操作を加えても


実引数である cube1に格納されている数値には


変化がおきない


このような


実引数から仮引数への数値データの渡し方を


値渡しっていうんだよね。



あっ 鳥が元気に飛んでるね」


アレサ「ほんとですの。」

                   🌞



🐤~~                    

    ☁ 

 ☁         🐤~~


🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

           🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

        🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳                            🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

         🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

           🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

        🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳                            🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

         🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳                   🐈🐟🐟

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

           🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

        🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳            🐳                🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

         🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳  🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 

🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 


      😊?

マックス 「て、てんC ここはどこだ?」

 

てんC 「現在の位置情報 ・・・解析できません」

           \👯/ ???


マックス 「どうやら探索に熱をいれすぎたようだな」


てんC 「はい


川で児童と水遊び


神社巡り 森林浴  焼きそば販売


球技観戦  プランテーションナッツ農園栽培


シャークウォッチング・・・・・


たくさん、たくさん探索してきました」



てんC「アロ~ハ~ オ~エ~~~」

........................................................  👯



(うねるように 遠ざかって見せるてんC )


マックス 「ははっ いつのまにフラダンスをおぼえたのか・・・」

😝     


       ..... 👯⇠⇠⇠


( 近づいて見せるてんC )


てんC 「はい、 みるものが わたしにとっては


新鮮なものばかりです。」


マックス「ここらは絶景ばかりだからな。


よ~し、さらにこの理想郷の自然を旅してみるか・・・


お前の成長にも役立つだろう。」


にこっと笑うマックス。


てんC 「そうとなれば ささっ次 いきましょう(*´▽`*)次」


マックス 「やる気 まんまんだな」







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

作者を応援しよう!

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

応援したユーザー

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