はじめに
C++やC言語で構造体(struct
)を学び始めると、しばしば「型」と「変数(実体)」の概念で混乱が生じることがあります。struct
の定義は、あくまで「こういう部品を組み合わせた、新しいデータ型を作りますよ」という設計図を作る作業にすぎません。
設計図を作っただけでは、まだ何も実体は存在しません。その設計図をもとに、実際にデータを格納するための変数を宣言して、初めてメモリ上に「実体(インスタンス)」が確保され、利用できるようになります。
この記事では、この構造体における「型(設計図)」と「変数(実体)」の重要な違いと、実際に変数を使って構造体のメンバにアクセスする方法を、分かりやすく解説します。
構造体の「型」と「変数」
家を建てるプロセスに例えてみましょう。
- 構造体の定義 (
struct
): 家の設計図を作ることです。設計図には「部屋が3つあって、窓が5つあって…」という情報が書かれていますが、この段階ではまだ家そのものは存在しません。 - 構造体変数の宣言: 設計図をもとに、実際に家を建てることです。
myHouse
という名前の家を建てることで、初めて人が住める「実体」ができます。
サンプルコード
このコードは、Book
(本)という構造体(型)を定義し、次に book1
というその型の変数(実体)を作成して、具体的な本の情報を格納・表示します。
完成コード
#include <iostream>
#include <string>
// --- 1. 構造体「型」の定義 (設計図) ---
struct Book {
std::string title; // タイトル
std::string author; // 著者
int price; // 価格
};
int main() {
// --- 2. 構造体「型」から変数(実体)を作成 ---
Book book1; // "Book"という設計図から、"book1"という名前の家を建てる
// --- 3. 変数(実体)の各メンバに値を代入 ---
// book1という家の、各部屋に家具を入れるイメージ
book1.title = "C++プログラミング入門";
book1.author = "山田 太郎";
book1.price = 2800;
// --- 4. メンバの値を参照して表示 ---
std::cout << "書籍情報" << std::endl;
std::cout << "タイトル: " << book1.title << std::endl;
std::cout << "著者: " << book1.author << std::endl;
std::cout << "価格: " << book1.price << "円" << std::endl;
return 0;
}
コードの解説
struct Book { ... };
これが、Book
という新しいデータ型を定義している部分です。int
やdouble
と同じように、Book
という型が使えるようになりましたが、この時点ではまだメモリ上にtitle
やauthor
を格納する領域は確保されていません。
Book book1;
main
関数の中で、定義したBook
型を使って book1
という変数を宣言しています。この行が実行されることで、初めてtitle
, author
, price
という3つのメンバを格納するためのメモリ領域が、book1
という名前で確保されます。これが「実体(インスタンス)」です。
book1.title = "..."
book1
という実体(変数)の、title
というメンバに、ドット演算子 .
を使ってアクセスし、値を代入しています。設計図であるBook
に直接値を代入することはできません。必ず、book1
のような変数(実体)を通して操作する必要があります。
まとめ
今回は、構造体における「型」と「変数」の fundamental な違いについて解説しました。
struct
の定義: 新しいデータ型の設計図を作ること。- 変数の宣言: 設計図から**実体(インスタンス)**を作ること。
- メンバへのアクセス:
変数名.メンバ名
のように、必ず実体を通して行う。
この「型と実体」の概念は、C++のクラスや、他の多くのオブジェクト指向言語においても共通する非常に重要な考え方です。この基本をしっかりと押さえることが、プログラミング学習の大きな一歩となります。