天国にいけるC言語入門 ヘキサ構造体 ver2.2126
main関数内で定義された構造体変数を自作関数の引数として定義された構造体変数に代入する・・・構造体変数の値渡し マックス達はバカンスしています
自作関数の弱点は参照渡しを行わなければmain関数内で変数宣言された変数に格納されているデータを変更することができないことにあります
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(cube1);
の実行時
自作関数Cubedata2baiHyouji(Cube a)の引数に
main関数内で定義された
Cube型の構造体変数cube1が代入されています
このとき
実引数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
から自作関数の仮引数である
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
だけが
Cube型の構造体変数aの各メンバ変数
a.no
a.tate
a.yoko
a.takasa
に代入されています
構造体変数cube1の各メンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
のアドレス情報を代表して
構造体変数cube1のアドレス&cube1を
自作関数の引数となっているCube*型のポインタ変数に
渡している
(のちのエピソードで詳しく解説されます)
つまり
参照渡ししているわけではありません
この方式は参照渡しではないですの。
自作関数の引数にCube*型のポインタ変数を設定して
構造体変数cube1のアドレスをわたさなければ
ポインタ変数を使って
構造体変数cube1のメンバ変数に格納されている数値データを
変更することはできません。
ですので
構造体変数cube1の各メンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データ
は
cube1のアドレス情報&cube1を格納するための
Cube*型のポインタ変数が自作関数に
つかわれていない自作関数
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回繰り返すと
このプログラムで注目すべき点は
↑ ↑ ↑上記のように
main関数内で
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のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データが
1
7.0
7.0
7.0
のまま
2倍となっていないことにあります。
自作関数
Cubedata2baiHyouji(cube1);
の実行により
つまり
自作関数
Cubedata2baiHyouji(cube a);
の引数として
main関数内で定義された構造体変数cube1が代入されることにより
main関数内で定義された構造体変数cube1の各メンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が
格納している数値データは2倍になりそうなものですが・・・」
solarplexuss「私も復唱させてぇ💖
🌳🌳🌳
main関数内で定義された構造体変数cube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
の格納している数値データの値は2倍になりそうなものですが・・・
の意味は
まず
自作関数の定義を観察してみると
👇
void Cubedata2baiHyouji(Cube a){
a.no= a.no*2;
a.tate= a.tate*2;
a.yoko= a.yoko*2;
a.takasa= a.takasa*2;
/*ここで各メンバ変数の値を2倍しています。*/
}
👆
ここで
ChangeCubedata2bai(cube1);
が実行されると
仮引数であるCube型の構造体変数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のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
に格納されている数値データには
変化がおきない
このような
実引数から仮引数への数値データの渡し方を
値渡しっていうんだよね。
あっ 鳥が元気に飛んでるね」
アレサ「ほんとですの。」
🌞
🐤~~
🐧
🐥 🐤~~
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🐈🐟🐟
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🐳 🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳 🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳🌳
😊?
マックス 「て、てんC ここはどこだ?」
てんC 「現在の位置情報 ・・・解析できません」
\👯/ ???
マックス 「どうやら探索に熱をいれすぎたようだな」
てんC 「はい
川で児童と水遊び
神社巡り 森林浴 焼きそば販売
球技観戦 プランテーションナッツ農園栽培
シャークウォッチング・・・・・
たくさん、たくさん探索してきました」
てんC「アロ~ハ~ オ~エ~~~」
........................................................ 👯
(うねるように 遠ざかって見せるてんC )
マックス 「ははっ いつのまにフラダンスをおぼえたのか・・・」
😝
..... 👯⇠⇠⇠
( 近づいて見せるてんC )
てんC 「はい、 みるものが わたしにとっては
新鮮なものばかりです。」
マックス「ここらは絶景ばかりだからな。
よ~し、さらにこの理想郷の自然を旅してみるか・・・
お前の成長にも役立つだろう。」
にこっと笑うマックス。
てんC 「そうとなれば ささっ次 いきましょう(*´▽`*)次」
マックス 「やる気 まんまんだな」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます