1 00:00:00,000 --> 00:00:02,395 >> [音楽再生] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> DOUG LLOYD:[OK]をクリックします。 4 00:00:06,506 --> 00:00:08,880 私たちは整数で働いてきました、 我々は文字で働いてきました、 5 00:00:08,880 --> 00:00:11,930 私たちは、フロートを働いてきました、 ダブルス、文字列、bools。 6 00:00:11,930 --> 00:00:14,870 私たちは、ほとんどすべて使い果たしました [聞こえない]タイプのもの 7 00:00:14,870 --> 00:00:17,100 沿って私たちのすべてに使用可能となっています。 8 00:00:17,100 --> 00:00:19,430 しかし、今、私たちはより多くの何かをしたいです。 9 00:00:19,430 --> 00:00:20,210 我々はそれをどのように行うのですか? 10 00:00:20,210 --> 00:00:22,560 どのように異なるデータ型を作成するのですか? 11 00:00:22,560 --> 00:00:26,130 我々は、構造体を使用して行うことができます。 12 00:00:26,130 --> 00:00:30,180 だから、構造体は、私たちは統一することができます 異なるタイプの変数 13 00:00:30,180 --> 00:00:34,810 シングル、新しい変数の型に変換し、 これは、我々は独自の型の名前を割り当てることができます。 14 00:00:34,810 --> 00:00:37,570 これは本当に強いです 行うことができるようにすること、 15 00:00:37,570 --> 00:00:40,900 私たちは今、グループことができるので、 異なるデータ型の要素 16 00:00:40,900 --> 00:00:43,910 論理的な接続を持って一緒に。 17 00:00:43,910 --> 00:00:46,440 私たちは、これを実行することができました ソートのアレイと、右? 18 00:00:46,440 --> 00:00:49,540 当社グループ化でき変数 同じデータ型の 19 00:00:49,540 --> 00:00:53,410 一緒に大きな単位で メモリアレイの。 20 00:00:53,410 --> 00:00:56,660 >> しかし、我々は、ミックスすることができていません 一緒に別のデータ型。 21 00:00:56,660 --> 00:01:02,610 私たちは、たとえば、整数を​​ペアにすることはできません、 文字、ダブルすべて 22 00:01:02,610 --> 00:01:05,330 同じことでと 単体ことを呼び出します。 23 00:01:05,330 --> 00:01:08,830 しかし、構造を持つ、または しばしば構造体と呼ばれます、 24 00:01:08,830 --> 00:01:09,585 私たちは、実際にすることができます。 25 00:01:09,585 --> 00:01:12,370 だから、構造体は、一種であります スーパー変数のよう。 26 00:01:12,370 --> 00:01:16,530 それは含んでいる変数です その中の他の変数。 27 00:01:16,530 --> 00:01:19,650 だからここの例を示します。 非常にシンプルな構造。 28 00:01:19,650 --> 00:01:23,380 これは、構文がどうなるかであります 車のための構造体を作成したいです。 29 00:01:23,380 --> 00:01:25,250 さて、ここで構文見ていきましょう。 30 00:01:25,250 --> 00:01:27,400 構造体、それはです 示すキーワード 31 00:01:27,400 --> 00:01:30,270 私はここで新しいデータ型を作成していています。 32 00:01:30,270 --> 00:01:33,860 具体的には、データタイプの名前であります 我々が表示されますように、構造体の車になるだろう。 33 00:01:33,860 --> 00:01:36,640 しかし、これは、チップの一種であります このコンパイラオフ 34 00:01:36,640 --> 00:01:42,440 起こっている変数のグループとして 同じタイプの一部と見なされます 35 00:01:42,440 --> 00:01:44,010 分インチ 36 00:01:44,010 --> 00:01:46,340 >> 車、構造体の名前だけ。 37 00:01:46,340 --> 00:01:50,590 ここでも、ここでデータ型が起こっています 構造体の車だけでなく、車もします。 38 00:01:50,590 --> 00:01:53,060 しかし、あなたがdifferent--を持っている場合 あなたは、複数の構造体を作成した場合 39 00:01:53,060 --> 00:01:56,950 同じプログラムで、あなたがする必要があります 構造体と構造体を区別します。 40 00:01:56,950 --> 00:02:00,140 だから、構造体の車、私も持っているかもしれません 構造体の学生、例えば、 41 00:02:00,140 --> 00:02:01,790 同じプログラムです。 42 00:02:01,790 --> 00:02:05,980 中括弧の内側にあります いわゆるフィールドのすべて、 43 00:02:05,980 --> 00:02:07,954 または構造体のメンバ。 44 00:02:07,954 --> 00:02:10,370 だから、いくつかのものは何ですか 車の中で固有であること? 45 00:02:10,370 --> 00:02:15,270 まあ、それは通常、年を持っています モデル名、およびナンバープレート、 46 00:02:15,270 --> 00:02:18,000 通常持ってオドメーター その上にマイルのいくつかの数、 47 00:02:18,000 --> 00:02:19,225 多分エンジンの大きさ。 48 00:02:19,225 --> 00:02:23,570 あなたが見ることができるように、私は混同してい 整数と文字とダブルス。 49 00:02:23,570 --> 00:02:26,420 彼らはすべてのことになるだろう この新しいデータタイプの一部。 50 00:02:26,420 --> 00:02:29,750 >> 最後に、最終的な事は私が行う必要があり、 この小さなセミコロンを忘れないでください 51 00:02:29,750 --> 00:02:30,290 最後に。 52 00:02:30,290 --> 00:02:34,380 我々は構造の定義を終了した後、 我々は最後にセミコロンを配置する必要があります。 53 00:02:34,380 --> 00:02:37,325 これは非常に一般的な構文のです 間違い、機能を持つため、 54 00:02:37,325 --> 00:02:40,200 たとえば、あなただけだろう 中括弧、近くに中括弧を開きます。 55 00:02:40,200 --> 00:02:42,950 あなたはにセミコロンを置きません 関数定義の終わり。 56 00:02:42,950 --> 00:02:46,430 これは、関数のように見えます 定義が、そうではありません、 57 00:02:46,430 --> 00:02:49,653 そのため、セミコロンがあります あなただけのリマインダーです 58 00:02:49,653 --> 00:02:52,440 ので、そこにそれを配置する必要があります コンパイラは、そうでない場合はしません 59 00:02:52,440 --> 00:02:53,510 それをどうするかを知っています。 60 00:02:53,510 --> 00:02:56,160 これは非常に一般的なエラーです 偶然作ります 61 00:02:56,160 --> 00:02:58,570 あなたが最初の構造を定義しているとき。 62 00:02:58,570 --> 00:02:59,500 >> OK。 63 00:02:59,500 --> 00:03:02,824 だから我々は通常、私たちの構造を定義します 我々のプログラムの一番上に 64 00:03:02,824 --> 00:03:05,490 彼らはおそらくつもりだので、 複数の機能によって使用されます。 65 00:03:05,490 --> 00:03:08,850 私たちは定義する必要はありません 関数の内部構造、 66 00:03:08,850 --> 00:03:12,110 我々はonly--ことができるので、 実際に構造の範囲 67 00:03:12,110 --> 00:03:13,790 その関数の内部でのみ存在します。 68 00:03:13,790 --> 00:03:17,450 我々は、おそらく構造を定義したいと思います 私たちは、複数の機能で使用することができ、 69 00:03:17,450 --> 00:03:20,670 または多分複数の中 互いに接続されているファイル 70 00:03:20,670 --> 00:03:22,920 私たちの単一のプログラムを作成します。 71 00:03:22,920 --> 00:03:24,920 時には代わり 構造を定義します 72 00:03:24,920 --> 00:03:27,961 あなたが入れた非常に上部にあなたの ポンドは含まれており、あなたのポンドの定義、 73 00:03:27,961 --> 00:03:32,080 例えば、あなたがそれらを置くかもしれません あなたが個別のドットHファイル、 74 00:03:32,080 --> 00:03:35,020 ポンドは自分自身が含まれています。 75 00:03:35,020 --> 00:03:37,620 >> だから、今の構造を持っていますが、 我々は彼らの中に取得する必要があります。 76 00:03:37,620 --> 00:03:39,800 どのように我々はの中に入りますか アクセスの構成 77 00:03:39,800 --> 00:03:43,530 それらのサブ変数、これらの変数 構造体の内部に存在していますか? 78 00:03:43,530 --> 00:03:46,810 まあ、我々はと呼ばれるものを持っています 私たちを可能にドット演算子、 79 00:03:46,810 --> 00:03:50,990 構造体のフィールドにアクセスします。 80 00:03:50,990 --> 00:03:55,490 したがって、たとえば、のは、私が宣言したとしましょう どこかに私の構造データ型 81 00:03:55,490 --> 00:03:59,020 私のプログラムの一番上にある、または多分で 私はポンドをしたドット時間ファイルが含まれています。 82 00:03:59,020 --> 00:04:03,360 私は、新しいを作成したい場合 そのデータ型の変数、私が言うことができ、 83 00:04:03,360 --> 00:04:06,260 構造体の車、私の車、セミコロン。 84 00:04:06,260 --> 00:04:11,580 私はint型を言うことができるのと同じように X、または文字列名のセミコロン。 85 00:04:11,580 --> 00:04:18,100 >> ここでデータ型は、構造体の車です 変数の名前は、私の車であります 86 00:04:18,100 --> 00:04:23,770 そして私はにドット演算子を使用することができます 私の車のさまざまなフィールドにアクセスします。 87 00:04:23,770 --> 00:04:27,494 だから私は自分の車を言うことができます ドット年には2011に等しいです。 88 00:04:27,494 --> 00:04:28,410 それは完全に罰金です。 89 00:04:28,410 --> 00:04:34,210 あなたが思い出すならば年は、と定義しました この構造体の車の内部整数フィールド 90 00:04:34,210 --> 00:04:35,200 データ型。 91 00:04:35,200 --> 00:04:39,966 構造体の車のデータのだから任意の変数 タイプ、そのような私の車のように、私は自分の車を言うことができます 92 00:04:39,966 --> 00:04:44,030 ドット年に等しく、次に割り当てます それいくつかの整数値、2011。 93 00:04:44,030 --> 00:04:47,290 私の車ドットプレートはCS50に等しいです。 94 00:04:47,290 --> 00:04:51,180 マイカードドットオドメーター 50505セミコロンに等しいです。 95 00:04:51,180 --> 00:04:53,270 それらのすべては 完全に罰金、それはです 96 00:04:53,270 --> 00:04:57,802 私たちはどのようにアクセスしますか 構造体のフィールド。 97 00:04:57,802 --> 00:05:00,260 構造体は、しかし、必要はありません スタック上に作成します。 98 00:05:00,260 --> 00:05:02,950 ただ、他の変数のように、我々 動的に割り当てることができます。 99 00:05:02,950 --> 00:05:06,309 我々はプログラムを持っている場合は、その可能性があります 多くの構造を生成すること、 100 00:05:06,309 --> 00:05:08,100 私たちはどのように多くの知りません 我々が必要としています、 101 00:05:08,100 --> 00:05:10,800 次に我々は、動的にする必要があり これらの構造を割り当てます 102 00:05:10,800 --> 00:05:12,960 私たちのプログラムとして実行されています。 103 00:05:12,960 --> 00:05:16,600 そして、私たちはアクセスしようとしているので、もし その文脈における構造体のフィールド、 104 00:05:16,600 --> 00:05:20,660 我々は最初の逆参照する必要がリコール 構造体へのポインタ、 105 00:05:20,660 --> 00:05:24,810 し、我々一度逆参照 ポインタは、その後、我々はフィールドにアクセスすることができます。 106 00:05:24,810 --> 00:05:26,830 我々は持っている場合 構造体へのポインタ、 107 00:05:26,830 --> 00:05:32,120 私たちは、ポインタドットフィールドを言うことはできません 名前を付けて、私たちが探しているものを手に入れます。 108 00:05:32,120 --> 00:05:34,259 逆参照の余分なステップがあります。 109 00:05:34,259 --> 00:05:36,050 それでは、それを言わせて 代わりにprevious--の 110 00:05:36,050 --> 00:05:38,770 ちょうど前の例のように、 代わりにそれを宣言する 111 00:05:38,770 --> 00:05:43,680 スタックに、構造体の車、私の 車、セミコロンは、私は、構造体の車を言います 112 00:05:43,680 --> 00:05:48,020 スターへのポインタ 構造体の車は、自分の車を呼ばれます 113 00:05:48,020 --> 00:05:51,250 構造体の車のmallocの大きさに等しいです。 114 00:05:51,250 --> 00:05:54,950 どのように多くの私たちのサイズは把握します 新しいデータ型が占めるバイト。 115 00:05:54,950 --> 00:05:58,570 あなたは必ずしものみ使用する必要はありません 幅、整数、または文字のサイズ、または任意の 116 00:05:58,570 --> 00:05:59,715 組み込みデータ型。 117 00:05:59,715 --> 00:06:02,090 コンパイラは十分にスマートであります どのように多くのバイト数を把握します 118 00:06:02,090 --> 00:06:04,170 あなたの新しい構造で必要とされます。 119 00:06:04,170 --> 00:06:09,610 だから私は自分自身のメモリユニットををmalloc 構造体の車を保持するのに十分な大きさ、 120 00:06:09,610 --> 00:06:12,410 私は戻ってポインタを取得 メモリのそのブロックに、 121 00:06:12,410 --> 00:06:16,090 そのポインタが私の車に割り当てられています。 122 00:06:16,090 --> 00:06:18,050 >> 今、私がアクセスしたい場合 私の車の分野、 123 00:06:18,050 --> 00:06:22,615 私が最初に私の車を間接参照使用して 間接参照演算子、星 124 00:06:22,615 --> 00:06:26,620 我々は、ポインタから見てきたこと 動画、そして私デリファレンスした後、 125 00:06:26,620 --> 00:06:32,200 私はにドット演算子を使用することができます 私の車のさまざまなフィールドにアクセスします。 126 00:06:32,200 --> 00:06:35,490 年が2011に等しいドット私の車にスターを付けます。 127 00:06:35,490 --> 00:06:38,480 それが効果を持っているでしょう 我々は、この場合に必要な、 128 00:06:38,480 --> 00:06:41,960 我々は動的にしましたので、 私の車を割り当てられました。 129 00:06:41,960 --> 00:06:43,610 >> それは正しい、しかし、種類の迷惑なんですか? 130 00:06:43,610 --> 00:06:44,818 今、2段階のプロセスがあります。 131 00:06:44,818 --> 00:06:47,460 今、私たちはdereference--する必要があります 私たちは星の演算子を持っています、 132 00:06:47,460 --> 00:06:48,910 私たちは、ドット演算子を持っています。 133 00:06:48,910 --> 00:06:51,660 そして、あなたが期待するかもしれないように、理由 Cプログラマは、より短い方法を愛します 134 00:06:51,660 --> 00:06:53,740 物事を行うには、そこにあります これを行うには、より短い方法。 135 00:06:53,740 --> 00:06:57,790 矢印と呼ばれる別のオペレータがあり、 これは、このプロセスは非常に簡単になります。 136 00:06:57,790 --> 00:07:00,750 矢印が動作する方法です これは、最初に逆参照 137 00:07:00,750 --> 00:07:03,560 左側のポインタ オペレータの側、 138 00:07:03,560 --> 00:07:06,620 し、その後、逆参照した後に 左側のポインタ、 139 00:07:06,620 --> 00:07:09,620 それは、右側のフィールドにアクセスします。 140 00:07:09,620 --> 00:07:14,170 だから、以前、我々はこの種を持っていました 星の私の車は、すべてこのようなものをドット 141 00:07:14,170 --> 00:07:15,880 以下のような存在に行くがたくさんあり​​ました。 142 00:07:15,880 --> 00:07:22,040 しかし、私たちが代わりに行うことができますことはthis--です 私の車の矢印年には2011に等しいです。 143 00:07:22,040 --> 00:07:23,580 >> 繰り返しますが、ここで何が起こっていますか? 144 00:07:23,580 --> 00:07:25,720 まず、私は私の車を逆参照しています。 145 00:07:25,720 --> 00:07:27,810 どの場合も、ここではポインタです。 146 00:07:27,810 --> 00:07:31,270 その後、た後に 私は、私の車を間接参照しました 147 00:07:31,270 --> 00:07:35,130 その後、フィールドにアクセスすることができます 今年、プレート、および走行距離計 148 00:07:35,130 --> 00:07:40,020 ちょうど私ができるように最初になる前に 私の車を間接参照するために使用するスター、 149 00:07:40,020 --> 00:07:42,020 フィールドにアクセスするために点在しています。 150 00:07:42,020 --> 00:07:45,290 だから、あなたは、構造を持つことができます 構造体へのポインタを持つことができ、 151 00:07:45,290 --> 00:07:48,360 あなたがアクセスする方法があります これらの構造の分野、 152 00:07:48,360 --> 00:07:52,600 あなたはへのポインタを持っているかどうか それらまたは変数そのもの。 153 00:07:52,600 --> 00:07:57,640 ドットまたは矢印に応じて どのように変数が宣言されました。 154 00:07:57,640 --> 00:08:00,510 私はダグロイドだけど、これはCS50です。 155 00:08:00,510 --> 00:08:01,975