【C++/C言語】構造体の全メンバを = で一括コピー(代入)する方法

目次

はじめに

C++やC言語の構造体(struct)で、ある変数の内容を、別の変数にそっくりそのままコピーしたい場合があります。メンバを一つずつ destination.id = source.id; のようにコピーしていくことも可能ですが、メンバの数が多いと非常に手間がかかります。

幸い、C++/C言語では、同じ型の構造体変数同士であれば、代入演算子(=)を使って、全てのメンバを一度の操作で丸ごとコピーすることができます。

この記事では、構造体変数同士の代入(一括コピー)の基本的な使い方を、サンプルコードと共に解説します。


構造体を一括コピーするサンプルコード

このコードは、Book(本)という構造体を定義し、originalBook という変数に情報を設定した後、その内容を = を使って copiedBook という別の変数に一括でコピーします。

完成コード

#include <iostream>
#include <string>

// 「本」構造体の定義
struct Book {
    std::string title; // タイトル
    std::string author; // 著者
    int price;         // 価格
};

int main() {
    // 1. コピー元の構造体変数を準備
    Book originalBook;
    originalBook.title = "C++プログラミング入門";
    originalBook.author = "山田 太郎";
    originalBook.price = 2800;

    // 2. コピー先の構造体変数を宣言
    Book copiedBook;

    // 3. 代入演算子(=)で、全メンバを一括コピー
    copiedBook = originalBook;

    // 4. コピーされた内容を確認
    std::cout << "コピーされた書籍情報" << std::endl;
    std::cout << "タイトル: " << copiedBook.title << std::endl;
    std::cout << "著者: " << copiedBook.author << std::endl;
    std::cout << "価格: " << copiedBook.price << "円" << std::endl;

    return 0;
}

実行結果

コピーされた書籍情報
タイトル: C++プログラミング入門
著者: 山田 太郎
価格: 2800円

コードの解説

copiedBook = originalBook;

この一行が、この記事の核心部分です。

  • originalBook に格納されている全てのメンバ(title, author, price)の値が、copiedBook の対応する各メンバに一つずつ自動的にコピーされます。
  • これは、内部的には以下のような処理をコンパイラが自動で行ってくれているのと同じです。C++// copiedBook = originalBook; は、以下の処理と等価 copiedBook.title = originalBook.title; copiedBook.author = originalBook.author; copiedBook.price = originalBook.price;

この「メンバごとのコピー(member-wise copy)」の仕組みにより、コードを非常に簡潔に記述できます。

注意点

この単純なコピーは、構造体のメンバが intstd::string のような基本的なデータ型で構成されている場合には問題なく機能します。

しかし、ポインタをメンバとして持つ構造体を扱う場合は注意が必要です。= によるコピーは、ポインタが指し示す先(メモリ上の実データ)をコピーするのではなく、ポインタのアドレス値そのものをコピーします(浅いコピー)。これにより、2つの構造体が同じメモリ領域を指してしまい、予期せぬ問題を引き起こす可能性があります。ポインタを扱う場合は、必要に応じて自分で深いコピー(ディープコピー)を実装する必要があります。


まとめ

今回は、代入演算子 = を使って、構造体の内容を別の構造体変数に一括でコピーする方法を解説しました。

  • 同じ型の構造体変数同士は、= で全メンバの値をコピーできる
  • これをメンバワイズコピーと呼ぶ。
  • ポインタをメンバに持つ場合は、挙動(浅いコピー)に注意が必要。

メンバを一つずつコピーする冗長なコードを書く必要はなく、= を使うだけでスマートに構造体の複製が可能です。ぜひ活用してください。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次