構造体の宣言
CoddyのCジャーニー「論理と制御フロー」セクションの一部。レッスン 39/63。
structとは何かを理解したところで、独自の構造体型を作成する方法を学びましょう。Cでstructを宣言するには、カスタムデータ型の設計図を定義する特定の構文に従います。
structを宣言する基本構文は次のとおりです。
struct StructureName {
datatype member1;
datatype member2;
// ... さらにメンバー
};各部分の仕組みは次のとおりです。まずstructキーワードを書き、その後に構造体の名前を続け、波かっこの中にすべてのメンバー変数を列挙します。各メンバーは、通常の変数と同じように、データ型と名前を指定して宣言します。閉じ波かっこの後のセミコロンを忘れないでください。
たとえば、2D空間内の点を表す構造体を作成するには、次のようにします。
struct Point {
int x;
int y;
};この宣言は、2つの整数メンバーxとyを含む、struct Pointという新しいデータ型を作成します。宣言すると、この構造体型をプログラム全体で使用して、座標情報を整理された形で保持する変数を作成できます。
チャレンジ
簡単図書館システムの本を表すstructを定義するCプログラムを作成してください。プログラムでは、次の処理を行います。
- 次のメンバーを含む
Bookという名前のstructを定義します。- 本の識別番号を格納する整数型の
id - 本のタイトルを格納する、サイズが50の文字配列
title - ページ数を格納する整数型の
pages - 本の価格を格納する浮動小数点型の
price
- 本の識別番号を格納する整数型の
- structを定義した後、確認メッセージを出力します:
Book struct defined successfully! sizeof(struct Book)を使ってBookstructのサイズをバイト単位で、次の形式で出力します:Size of Book struct: [size] bytes- 各メンバーの型を
sizeof()に渡して、メンバーごとにサイズを出力します。たとえば、idにはsizeof(int)、titleにはsizeof(char[50])、priceにはsizeof(float)を使います。Size of id: [size] bytesSize of title: [size] bytesSize of pages: [size] bytesSize of price: [size] bytes
メンバーのサイズの合計は62バイトですが、sizeof(struct Book)の結果は64です。コンパイラは、pagesが4の倍数の位置から始まるように、titleの後に2バイトのパディングを追加します。
この課題では、structキーワードの適切な使用、適切なデータ型を使ったメンバー宣言、閉じ波括弧の後のセミコロンなど、struct宣言の構文についての理解を確認します。また、sizeof()演算子を使って、Cがstructのメンバーにどのようにメモリを割り当てるかも学びます。
正確なサイズの値はシステムのアーキテクチャによって異なる場合がありますが、プログラムが正常にコンパイル・実行されるには、struct定義の構文が正しくなければならないことを覚えておいてください。
自分で試してみよう
#include <stdio.h>
int main() {
// TODO: ここでBook構造体を定義する
// 確認メッセージを出力する
printf("Book struct defined successfully!\n");
// TODO: Book構造体とそのメンバーのサイズを出力する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
自分で練習してみよう: Cオンラインコンパイラ