広告スペース(バナー)
🔧C言語 レッスン
基本文法の基礎8
データ構造とオブジェクト指向7
構文の基本を深める9
関数とデータ構造の応用9
アルゴリズムとテストの基礎8
文字列・数値操作の応用8
実務で役立つ機能8
アルゴリズム練習問題10
レッスン 40 / 68

浅いコピーと深いコピーの違い

このレッスンでは、C言語における浅いコピーと深いコピーの違いを学び、意図しないデータの共有によるバグを防げるようになることを目標にします。「C言語 浅いコピー 深いコピー」で調べている方向けです。

C言語の構造体をそのまま代入すると値ごとコピーされますが、構造体の中にポインタを含む場合は、ポインタが指す先のデータまでは複製されません。これが「浅いコピー」の状態です。

サンプルコードでは、Person構造体がAddress *addressというポインタフィールドを持っています。この構造体をそのままコピーすると、コピー先とコピー元が同じAddressを指したままになり、片方を変更するともう片方にも影響してしまいます。

初心者がよくつまずくのが、「コピーしたはずなのに、元のデータまで書き換わってしまった」というバグです。ポインタを含む構造体を扱うときに特に起こりやすいので注意しましょう。

実際の開発現場では、ポインタが指す先のデータまで新しく確保してコピーする「深いコピー」の実装が、意図しないデータ共有を防ぐために必要になります。

📖 お手本コード
✍️ あなたのコード
コードを書いたら「実行する」を押してください

🧪 このサイトではC言語を直接コンパイル・実行できないため、お手本コードと同じ内容を入力できたかをその場で判定します(採点はブラウザ内だけで行われ、どこにも送信されません)。

🎯
ここまでできればゴール達成!
元のデータを壊さずに、安全に複製できるようになります。
広告スペース(バナー)
広告スペース(記事内)