>> [音楽再生]
>> DOUG LLOYD：[OK]をクリックします。
私たちは整数で働いてきました、 我々は文字で働いてきました、
私たちは、フロートを働いてきました、 ダブルス、文字列、bools。
私たちは、ほとんどすべて使い果たしました [聞こえない]タイプのもの
沿って私たちのすべてに使用可能となっています。
しかし、今、私たちはより多くの何かをしたいです。
我々はそれをどのように行うのですか？
どのように異なるデータ型を作成するのですか？
我々は、構造体を使用して行うことができます。
だから、構造体は、私たちは統一することができます 異なるタイプの変数
シングル、新しい変数の型に変換し、 これは、我々は独自の型の名前を割り当てることができます。
これは本当に強いです 行うことができるようにすること、
私たちは今、グループことができるので、 異なるデータ型の要素
論理的な接続を持って一緒に。
私たちは、これを実行することができました ソートのアレイと、右？
当社グループ化でき変数 同じデータ型の
一緒に大きな単位で メモリアレイの。
>> しかし、我々は、ミックスすることができていません 一緒に別のデータ型。
私たちは、たとえば、整数を​​ペアにすることはできません、 文字、ダブルすべて
同じことでと 単体ことを呼び出します。
しかし、構造を持つ、または しばしば構造体と呼ばれます、
私たちは、実際にすることができます。
だから、構造体は、一種であります スーパー変数のよう。
それは含んでいる変数です その中の他の変数。
だからここの例を示します。 非常にシンプルな構造。
これは、構文がどうなるかであります 車のための構造体を作成したいです。
さて、ここで構文見ていきましょう。
構造体、それはです 示すキーワード
私はここで新しいデータ型を作成していています。
具体的には、データタイプの名前であります 我々が表示されますように、構造体の車になるだろう。
しかし、これは、チップの一種であります このコンパイラオフ
起こっている変数のグループとして 同じタイプの一部と見なされます
分インチ
>> 車、構造体の名前だけ。
ここでも、ここでデータ型が起こっています 構造体の車だけでなく、車もします。
しかし、あなたがdifferent--を持っている場合 あなたは、複数の構造体を作成した場合
同じプログラムで、あなたがする必要があります 構造体と構造体を区別します。
だから、構造体の車、私も持っているかもしれません 構造体の学生、例えば、
同じプログラムです。
中括弧の内側にあります いわゆるフィールドのすべて、
または構造体のメンバ。
だから、いくつかのものは何ですか 車の中で固有であること？
まあ、それは通常、年を持っています モデル名、およびナンバープレート、
通常持ってオドメーター その上にマイルのいくつかの数、
多分エンジンの大きさ。
あなたが見ることができるように、私は混同してい 整数と文字とダブルス。
彼らはすべてのことになるだろう この新しいデータタイプの一部。
>> 最後に、最終的な事は私が行う必要があり、 この小さなセミコロンを忘れないでください
最後に。
我々は構造の定義を終了した後、 我々は最後にセミコロンを配置する必要があります。
これは非常に一般的な構文のです 間違い、機能を持つため、
たとえば、あなただけだろう 中括弧、近くに中括弧を開きます。
あなたはにセミコロンを置きません 関数定義の終わり。
これは、関数のように見えます 定義が、そうではありません、
そのため、セミコロンがあります あなただけのリマインダーです
ので、そこにそれを配置する必要があります コンパイラは、そうでない場合はしません
それをどうするかを知っています。
これは非常に一般的なエラーです 偶然作ります
あなたが最初の構造を定義しているとき。
>> OK。
だから我々は通常、私たちの構造を定義します 我々のプログラムの一番上に
彼らはおそらくつもりだので、 複数の機能によって使用されます。
私たちは定義する必要はありません 関数の内部構造、
我々はonly--ことができるので、 実際に構造の範囲
その関数の内部でのみ存在します。
我々は、おそらく構造を定義したいと思います 私たちは、複数の機能で使用することができ、
または多分複数の中 互いに接続されているファイル
私たちの単一のプログラムを作成します。
時には代わり 構造を定義します
あなたが入れた非常に上部にあなたの ポンドは含まれており、あなたのポンドの定義、
例えば、あなたがそれらを置くかもしれません あなたが個別のドットHファイル、
ポンドは自分自身が含まれています。
>> だから、今の構造を持っていますが、 我々は彼らの中に取得する必要があります。
どのように我々はの中に入りますか アクセスの構成
それらのサブ変数、これらの変数 構造体の内部に存在していますか？
まあ、我々はと呼ばれるものを持っています 私たちを可能にドット演算子、
構造体のフィールドにアクセスします。
したがって、たとえば、のは、私が宣言したとしましょう どこかに私の構造データ型
私のプログラムの一番上にある、または多分で 私はポンドをしたドット時間ファイルが含まれています。
私は、新しいを作成したい場合 そのデータ型の変数、私が言うことができ、
構造体の車、私の車、セミコロン。
私はint型を言うことができるのと同じように X、または文字列名のセミコロン。
>> ここでデータ型は、構造体の車です 変数の名前は、私の車であります
そして私はにドット演算子を使用することができます 私の車のさまざまなフィールドにアクセスします。
だから私は自分の車を言うことができます ドット年には2011に等しいです。
それは完全に罰金です。
あなたが思い出すならば年は、と定義しました この構造体の車の内部整数フィールド
データ型。
構造体の車のデータのだから任意の変数 タイプ、そのような私の車のように、私は自分の車を言うことができます
ドット年に等しく、次に割り当てます それいくつかの整数値、2011。
私の車ドットプレートはCS50に等しいです。
マイカードドットオドメーター 50505セミコロンに等しいです。
それらのすべては 完全に罰金、それはです
私たちはどのようにアクセスしますか 構造体のフィールド。
構造体は、しかし、必要はありません スタック上に作成します。
ただ、他の変数のように、我々 動的に割り当てることができます。
我々はプログラムを持っている場合は、その可能性があります 多くの構造を生成すること、
私たちはどのように多くの知りません 我々が必要としています、
次に我々は、動的にする必要があり これらの構造を割り当てます
私たちのプログラムとして実行されています。
そして、私たちはアクセスしようとしているので、もし その文脈における構造体のフィールド、
我々は最初の逆参照する必要がリコール 構造体へのポインタ、
し、我々一度逆参照 ポインタは、その後、我々はフィールドにアクセスすることができます。
我々は持っている場合 構造体へのポインタ、
私たちは、ポインタドットフィールドを言うことはできません 名前を付けて、私たちが探しているものを手に入れます。
逆参照の余分なステップがあります。
それでは、それを言わせて 代わりにprevious--の
ちょうど前の例のように、 代わりにそれを宣言する
スタックに、構造体の車、私の 車、セミコロンは、私は、構造体の車を言います
スターへのポインタ 構造体の車は、自分の車を呼ばれます
構造体の車のmallocの大きさに等しいです。
どのように多くの私たちのサイズは把握します 新しいデータ型が占めるバイト。
あなたは必ずしものみ使用する必要はありません 幅、整数、または文字のサイズ、または任意の
組み込みデータ型。
コンパイラは十分にスマートであります どのように多くのバイト数を把握します
あなたの新しい構造で必要とされます。
だから私は自分自身のメモリユニットををmalloc 構造体の車を保持するのに十分な大きさ、
私は戻ってポインタを取得 メモリのそのブロックに、
そのポインタが私の車に割り当てられています。
>> 今、私がアクセスしたい場合 私の車の分野、
私が最初に私の車を間接参照使用して 間接参照演算子、星
我々は、ポインタから見てきたこと 動画、そして私デリファレンスした後、
私はにドット演算子を使用することができます 私の車のさまざまなフィールドにアクセスします。
年が2011に等しいドット私の車にスターを付けます。
それが効果を持っているでしょう 我々は、この場合に必要な、
我々は動的にしましたので、 私の車を割り当てられました。
>> それは正しい、しかし、種類の迷惑なんですか？
今、2段階のプロセスがあります。
今、私たちはdereference--する必要があります 私たちは星の演算子を持っています、
私たちは、ドット演算子を持っています。
そして、あなたが期待するかもしれないように、理由 Cプログラマは、より短い方法を愛します
物事を行うには、そこにあります これを行うには、より短い方法。
矢印と呼ばれる別のオペレータがあり、 これは、このプロセスは非常に簡単になります。
矢印が動作する方法です これは、最初に逆参照
左側のポインタ オペレータの側、
し、その後、逆参照した後に 左側のポインタ、
それは、右側のフィールドにアクセスします。
だから、以前、我々はこの種を持っていました 星の私の車は、すべてこのようなものをドット
以下のような存在に行くがたくさんあり​​ました。
しかし、私たちが代わりに行うことができますことはthis--です 私の車の矢印年には2011に等しいです。
>> 繰り返しますが、ここで何が起こっていますか？
まず、私は私の車を逆参照しています。
どの場合も、ここではポインタです。
その後、た後に 私は、私の車を間接参照しました
その後、フィールドにアクセスすることができます 今年、プレート、および走行距離計
ちょうど私ができるように最初になる前に 私の車を間接参照するために使用するスター、
フィールドにアクセスするために点在しています。
だから、あなたは、構造を持つことができます 構造体へのポインタを持つことができ、
あなたがアクセスする方法があります これらの構造の分野、
あなたはへのポインタを持っているかどうか それらまたは変数そのもの。
ドットまたは矢印に応じて どのように変数が宣言されました。
私はダグロイドだけど、これはCS50です。