#include <stdio.h>
// 構造体の定義
struct student {
int id; /* 学籍番号 */
int eng; /* 英語の成績 */
int math; /* 数学の成績 */
int sci; /* 理科の成績 */
int total; /* 合計点 */
};
// 値渡し関数(スライド通り)
void sum1(struct student s) {
s.total = s.eng + s.math + s.sci;
}
// 参照渡し関数(★間接演算子をアロー演算子に書き換え箇所)
void sum2(struct student *p) {
p->total = p->eng + p->math + p->sci;
}
int main() {
// 構造体変数の初期化
struct student s = {17001, 60, 100, 20};
// sum1(値渡し)の呼び出しと結果出力
sum1(s); /* 値渡し */
printf("%7d %5d %5d %5d %10d\n", s.
id, s.
eng, s.
math, s.
sci, s.
total);
// sum2(参照渡し・アロー演算子版)の呼び出しと結果出力
sum2(&s); /* 参照渡し */
printf("%7d %5d %5d %5d %10d\n", s.
id, s.
eng, s.
math, s.
sci, s.
total);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDmp4vpgKDkvZPjga7lrprnvqkKc3RydWN0IHN0dWRlbnQgewogICAgaW50IGlkOyAgICAvKiDlrabnsY3nlarlj7cgKi8KICAgIGludCBlbmc7ICAgLyog6Iux6Kqe44Gu5oiQ57i+ICovCiAgICBpbnQgbWF0aDsgIC8qIOaVsOWtpuOBruaIkOe4viAqLwogICAgaW50IHNjaTsgICAvKiDnkIbnp5Hjga7miJDnuL4gKi8KICAgIGludCB0b3RhbDsgLyog5ZCI6KiI54K5ICovCn07CgovLyDlgKTmuKHjgZfplqLmlbDvvIjjgrnjg6njgqTjg4npgJrjgorvvIkKdm9pZCBzdW0xKHN0cnVjdCBzdHVkZW50IHMpIHsKICAgIHMudG90YWwgPSBzLmVuZyArIHMubWF0aCArIHMuc2NpOwp9CgovLyDlj4LnhafmuKHjgZfplqLmlbDvvIjimIXplpPmjqXmvJTnrpflrZDjgpLjgqLjg63jg7zmvJTnrpflrZDjgavmm7jjgY3mj5vjgYjnrofmiYDvvIkKdm9pZCBzdW0yKHN0cnVjdCBzdHVkZW50ICpwKSB7CiAgICBwLT50b3RhbCA9IHAtPmVuZyArIHAtPm1hdGggKyBwLT5zY2k7Cn0KCmludCBtYWluKCkgewogICAgLy8g5qeL6YCg5L2T5aSJ5pWw44Gu5Yid5pyf5YyWCiAgICBzdHJ1Y3Qgc3R1ZGVudCBzID0gezE3MDAxLCA2MCwgMTAwLCAyMH07CgogICAgLy8gc3VtMe+8iOWApOa4oeOBl++8ieOBruWRvOOBs+WHuuOBl+OBqOe1kOaenOWHuuWKmwogICAgc3VtMShzKTsgLyog5YCk5rih44GXICovCiAgICBwcmludGYoIiU3ZCAlNWQgJTVkICU1ZCAlMTBkXG4iLCBzLmlkLCBzLmVuZywgcy5tYXRoLCBzLnNjaSwgcy50b3RhbCk7CgogICAgLy8gc3VtMu+8iOWPgueFp+a4oeOBl+ODu+OCouODreODvOa8lOeul+WtkOeJiO+8ieOBruWRvOOBs+WHuuOBl+OBqOe1kOaenOWHuuWKmwogICAgc3VtMigmcyk7IC8qIOWPgueFp+a4oeOBlyAqLwogICAgcHJpbnRmKCIlN2QgJTVkICU1ZCAlNWQgJTEwZFxuIiwgcy5pZCwgcy5lbmcsIHMubWF0aCwgcy5zY2ksIHMudG90YWwpOwoKICAgIHJldHVybiAwOwp9Cg==