広告スペース

確認問題(構造体)

構造体の初期化、代入、アロー演算子、構造体配列の理解度を確認しましょう。

確認問題1 ― 構造体の基本

struct Point { int x; int y; };
struct Point p = {3, 7};
printf("(%d, %d)\n", p.x, p.y);

出力結果は?

(3, 7)
(7, 3)
コンパイルエラー
(0, 0)
解説: 構造体は宣言順にメンバが初期化されます。p.x=3, p.y=7。

確認問題2 ― 構造体の代入

struct Point a = {1, 2};
struct Point b;
b = a;
b.x = 10;
printf("a.x=%d, b.x=%d\n", a.x, b.x);

出力結果は?

a.x=10, b.x=10
a.x=1, b.x=10
コンパイルエラー
a.x=1, b.x=1
解説: 構造体の代入は値コピー。b は a のコピーなので、b.x を変更しても a.x は変わりません。

確認問題3 ― アロー演算子

struct Point p = {5, 8};
struct Point *ptr = &p;
printf("%d\n", ptr->y);

出力結果は?

5
8
コンパイルエラー
アドレス値
解説: ptr->y(*ptr).y と同じ。ポインタ経由でメンバにアクセスする際はアロー演算子を使います。p.y = 8

確認問題4 ― 構造体配列

struct Student { char name[20]; int score; };
struct Student s[3] = {
    {"Taro", 80}, {"Hanako", 95}, {"Jiro", 70}
};
int max = 0;
for (int i = 0; i < 3; i++) {
    if (s[i].score > s[max].score) max = i;
}
printf("%s\n", s[max].name);

出力結果は?

Taro
Hanako
Jiro
コンパイルエラー
解説: 最大スコアの学生を探すループ。s[1].score=95 が最大なので max=1、s[1].name = "Hanako"

結果

回答してください
構造体の講座に戻るホームへ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で演習問題も充実。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ