天国にいけるC言語入門 ヘキサ構造体 ver3.2128
引数に構造体変数の用いられた自作関数が実行されてもmain関数内で定義された構造体変数のメンバ変数に格納されている数値データを変更することはできません その3
引数に構造体変数の用いられた自作関数が実行されてもmain関数内で定義された構造体変数のメンバ変数に格納されている数値データを変更することはできません その3
さらにさらに
main関数内で変数宣言された構造体変数が
自作関数の引数部分の構造体変数宣言に代入されて
自作関数が実行されたとしても
main関数内で変数宣言された構造体変数のメンバ変数に
格納されている数値データを変更されません
ということを
さらに別のプログラムで考察してみましょう
まずは次のプログラムをご覧ください
#include <stdio.h>
typedef struct {
int age;/*キャラクターの年齢*/
int height;/*キャラクターの身長*/
int weight;/*キャラクターの体重*/
}CharacterData;
int main(void)
{
CharacterData Aresa = { 18,168,45}; /*年齢18, 身長168,体重45*/
/*👆まずはAresaのCharacterData型の構造体変数宣言と初期化を行っています*/
printf("年齢は%d才です\n", Aresa.age);
printf("身長は%dcmです\n", Aresa.height);
printf("体重は%dkgです\n", Aresa.weight);
/*👆初期化されたアレサの年齢、身長、体重を表示しています*/
return 0;
}
プログラムの実行結果
年齢は18才です
身長は168cmです
体重は45kgです
C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 29576) は、コード 0 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
このプログラムでは
構造体CharacterData
👇
typedef struct {
int age;/*キャラクターの年齢*/
int height;/*キャラクターの身長*/
int weight;/*キャラクターの体重*/
}CharacterData;
👆
を用いることにより
アレサというキャラクターの
年齢
身長
体重
のデータを管理しています
AresaのCharacterData型の構造体変数宣言
CharacterData Aresa = { 18,168,45}; /*年齢18, 身長168,体重45*/
が実行されていますね
このCharacterData型の構造体変数Aresa
変数名Aresa
は
アレサというキャラクターの
年齢
身長
体重
のデータを管理するのに最適な名前ですね
CharacterData Aresa = { 18,168,45};
が実行されると
CharacterData型の構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
に数値データ
18
168
45
が
代入されることになります
では
自作関数をもちいて
この
アレサというキャラクターの
年齢
身長
体重
のデータを変更する
つまり
構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
に格納されている数値データ
を
18
168
45
から
12
128
35
に変更するにはどうしたらよいでしょうか?
先ほどは失敗しましたが
そこのあなた
自作関数を用いて
構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
に格納されている数値データ
を
18
168
45
から
12
128
35
に変更してみませんか?
どうしよっかな~
そうだ こ~んな自作関数を設定してみてはいかがでしょうか?
👇
void setCharacterData(CharacterData a, int nenrei, int sinchyou, int taijyuu) {
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
return;
}
👆
えっ
さっきのエピソードで登場した自作関数とまったく同じ自作関数・・・ですか・・・
私なにいってるか わっかりませ~ん
えへっ
なぜ
引数に
CharacterData a
int nenrei
int sinchyou,
int taijyuu
が設定されているのでしょうか
例えばこの自作関数が用いられたプログラムは以下のようになります
👇
#include <stdio.h>
typedef struct {
int age;/*キャラクターの年齢*/
int height;/*キャラクターの身長*/
int weight;/*キャラクターの体重*/
}CharacterData;
void setCharacterData(CharacterData a, int nenrei, int sinchyou, int taijyuu) {
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
return;
}
int main(void)
{
CharacterData Aresa = { 18,168,45}; /*年齢18, 身長168,体重45*/
/*👆まずはAresaのCharacterData型の構造体変数宣言と初期化を行っています*/
printf("年齢は%d才です\n", Aresa.age);
printf("身長は%dcmです\n", Aresa.height);
printf("体重は%dkgです\n", Aresa.weight);
/*👆まずは初期化されたアレサの年齢、身長、体重を表示しています*/
printf("\n");
int new_version_age = 12;
int new_version_height = 128;
int new_version_weight = 35;
/*👆アレサの年齢を12、身長を128、体重を35に変更するための準備としてnew_version_age new_version_height new_version_weightに12,128,35を代入しています*/
setCharacterData(Aresa,new_version_age,new_version_height,new_version_weight);
/*👆自作関数setCharacterDataを実行してアレサの年齢、身長、体重を変更しようとしていますが・・・*/
printf("年齢は%d才です\n", Aresa.age);
printf("身長は%dcmです\n", Aresa.height);
printf("体重は%dkgです\n", Aresa.weight);
/*👆変更後のアレサの年齢、身長、体重を表示しようとしています・・・が・・・*/
return 0;
}
プログラムの実行結果
年齢は18才です
身長は168cmです
体重は45kgです
年齢は18才です
身長は168cmです
体重は45kgです
C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 28776) は、コード 0 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
ソーラー「ぜんぜん
アレサの
年齢は
18から12に
身長は
168から128に
体重は
45から35に
変更されていません
つまり
構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
に格納されている数値データ
は
18
168
45
から
12
128
35
に変更されていません
setCharacterData(Aresa,new_version_age,new_version_height,new_version_weight);
が実行されると
まず
自作関数setCharacterDataの定義
👇
void setCharacterData(CharacterData a, int nenrei, int sinchyou, int taijyuu) {
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
return;
}
の
💖引数となっている💖
CharacterData a
に
Aresa
int nenrei
に
new_version_age
int sinchyou
に
new_version_height
int taijyuu
に
new_version_weight
が代入されるので
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
は
Aresa.age=new_version_age;
Aresa.height=new_version_height;
Aresa.weight=new_version_weight;
を表すことになり
Aresa.age=new_version_age;
Aresa.height=new_version_height;
Aresa.weight=new_version_weight;
が
実行されることに
実際には
CharacterData a
に
💖Aresaの持っているデータだけが💖
代入されることになります
つまり
CharacterData型の構造体変数aのメンバ変数
a.age
a.height
a.weight
に
CharacterData型の構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
の格納している値
18
168
45
が代入されることになります
つまり
a.age =18;
a.height= 168;
a.weight =45;
が実行されることになります
int nenrei
には
new_version_ageが格納している数値データ12
int sinchyou
に
new_version_heightが格納している数値データ128
int taijyuu
に
new_version_weightが格納している数値データ35
が代入されることになります
その後
自作関数setCharacterDataの定義
👇
void setCharacterData(CharacterData a, int nenrei, int sinchyou, int taijyuu) {
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
return;
}
の
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
が実行されていくことになるのですが
int nenrei
に
12
int sinchyou
に
128
int taijyuu
に
35
が代入されているので
a.age =12;
a.height= 128;
a.weight =35;
が実行されることになります
単に
a.age =12;
a.height= 128;
a.weight =35;
が実行されるだけなので
CharacterData型の構造体変数Aresaのメンバ変数
Aresa.age
Aresa.height
Aresa.weight
の格納している値
18
168
45
が
12
128
35
に変更されるようなことはありません
ですので
プログラムの実行結果に
プログラムの実行結果
年齢は18才です
身長は168cmです
体重は45kgです
年齢は18才です
身長は168cmです
体重は45kgです
が表示されることになります
#include <stdio.h>
typedef struct {
int age;/*キャラクターの年齢*/
int height;/*キャラクターの身長*/
int weight;/*キャラクターの体重*/
}CharacterData;
void setCharacterData(CharacterData a, int nenrei, int sinchyou, int taijyuu) {
a.age = nenrei; /*キャラクターの年齢を設定しています*/
a.height = sinchyou; /*キャラクターの身長を設定します*/
a.weight = taijyuu; /*キャラクターの体重を設定します*/
return;
}
int main(void)
{
CharacterData Aresa = { 18,168,45}; /*年齢18, 身長168,体重45*/
/*👆まずはAresaのCharacterData型の構造体変数宣言と初期化を行っています*/
printf("年齢は%d才です\n", Aresa.age);
printf("身長は%dcmです\n", Aresa.height);
printf("体重は%dkgです\n", Aresa.weight);
/*👆まずは初期化されたアレサの年齢、身長、体重を表示しています*/
printf("\n");
int new_version_age = 12;
int new_version_height = 128;
int new_version_weight = 35;
setCharacterData(Aresa,new_version_age,new_version_height,new_version_weight);
/*👆アレサの年齢、身長、体重を変更しようとしていますが・・・*/
printf("年齢は%d才です\n", Aresa.age);
printf("身長は%dcmです\n", Aresa.height);
printf("体重は%dkgです\n", Aresa.weight);
/*👆変更後のアレサの年齢、身長、体重を表示しようとしています・・・が・・・*/
return 0;
}
プログラムの実行結果
年齢は18才です
身長は168cmです
体重は45kgです
年齢は18才です
身長は168cmです
体重は45kgです
C:\Users\solar\source\repos\Project2\Debug\Project2.exe (プロセス 28776) は、コード 0 で終了しました。
このウィンドウを閉じるには、任意のキーを押してください...
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます