はじめに
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++のクラスや、他の多くのオブジェクト指向言語においても共通する非常に重要な考え方です。この基本をしっかりと押さえることが、プログラミング学習の大きな一歩となります。
