C 基本講座

構造体の代入と比較を行う

LinkedInラーニングの無料トライアルを今すぐ試そう

無料で視聴する すべての加入プランを見る
このレッスンでは、構造体の代入と比較の仕方について説明します。
講師:
05:16

字幕

このレッスンでは、構造体の代入と比較の仕方について説明します。配列の場合には、一括代入はできませんでしたが同一型の構造体では一括代入が可能です。このプログラムでは student 型の構造体の変数の seito1 と seito2 が宣言されています。seito1 の方は初期化していますがseito2 は宣言しただけなので中身は不定値です。実行してみましょう。このように中身が不定値であることが確認できます。では seito1 を seito2 に代入してみましょう。このように構造体では、同じ型の場合一括代入が可能です。実行してみましょう。今度は seito1 を seito2 に代入したので同じ内容を表示しますね。たまに、構造体の一括代入が可能であることを知らずにメンバを1つ1つ代入している人を見かけますがこれは効率的ではありませんので一括代入するようにしてください。構造体の一括代入が可能なら構造体の一括比較も可能かというとことはそう簡単ではありません。もしこのように構造体の一括比較を行おうとするとコンパイラはエラーを表示します。このような一括比較は行なえません。ですから、面倒でも1つずつメンバを比較するようにしてください。 この時、メンバのネームは文字列ですからstrcmp を使って比較する必要があります。string.h の include も忘れないようにしてください。実行してみましょう。今度はこのように2つの構造体は等しいのでメンバは等しいと表示していますね。中にはこの memcmp 関数を使ってメモリブロックで比較すればいいのではないかと考える人もいるかもしれませんね。memcmp は2つのメモリブロックをサイズ分比較し等しければ「0」を返還する標準ライブラリ関数です。使用するには string.h の include が必要です。一見良さそうですが、実は間違いです。構造体はメンバ以外にパディングと呼ばれる詰め物を持つ場合があります。パディングの存在は構造体のサイズを表示してみればわかります。サイズを調べてみるとこのように 32 バイトと表示されました。Windows 10 で GCC でこの例は実行していますがint サイズは4バイトdouble サイズは8バイトそして char 型の要素数 15 の配列は15 バイトなので合計すると 27 バイトのはずです。32 とサイズがでるということはつまりパディングが5バイトあるということになります。 これはメモリアクセスを効率良く行うために処理系に都合のいいように構造体のメンバを配置しているからなのです。このパディングは不定値です。ですからバイト単位で比較を行うmemcmp ではメンバの内容が同じでも不一致になる可能性があるのです。結局のところ構造体の比較はメンバ単位で行うしか、手はないということになります。このレッスンでは、構造体の代入と比較の仕方について説明しました。

C 基本講座

C言語はUNIXというOSを記述するために開発されたプログラミング言語で、組み込みシステムの開発を中心に今も使われています。このコースでは簡単なプログラムを作成しながら、C言語の基本的な文法を学びます。データ型や制御文などの基礎的な文法からポインタや構造体といったC言語の特徴的な内容まで幅広く取り上げます。よく使われる標準ライブラリ関数も数多く紹介します。

5時間45分 (60 ビデオ)
現在、カスタマーレビューはありません…
ソフトウェア・トピック
プラン加入者限定
発売日:2017年11月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。