[音楽再生] DOUG LLOYD:すべての権利。 シングルでの作業 変数はかなり楽しいです。 しかし、私たちが仕事をしたい場合はどう 多くの変数と、 しかし、我々はの束を持っている必要はありません 私たちのコードの周りを飛んで別の名前? この場合、配列です 本当に便利で来るつもり。 配列は本当に基本的なデータであり、 任意のプログラミング言語のための構造 あなたが使用すること。 そして、彼らは、本当に、本当に便利です 特に、我々は、CS 50で、表示されますよう。 私たちは、保持するための配列を使用 同じデータ型の値 連続したメモリの場所で。 それはそれはだ、と言うことです 方法私達はグループのことが可能 一緒の整数の束 メモリや文字の束 または実際にメモリに浮かびます 一緒に閉じて作業 彼らとそれぞれを与えることなく、 1独自の名前、することができます しばらく後に面倒な取得。 今、一つの方法は、配列を類推します お近くのポストについて考えることです 秒事務所。 だから、プログラミングから離れます ちょうどあなたの目を閉じて そして、心の中で可視化 お近くの郵便局。 通常、ほとんどのポストで オフィス、大手銀行があります 壁に郵便局ボックス。 アレイは、巨大なブロックであり、 連続したメモリ、 メールと同じ方法 あなたの郵便局の銀行 上に大きなスペースです 郵便局の壁。 アレイは、小型に分割されており、 スペースの同じサイズのブロック、 それらの各々はで、要素と呼ばれ 同じようにポストの壁こと 事務所は小規模に分割されています、 スペースの同じサイズのブロック、 これは我々が私書箱を呼び出します。 配列の各要素缶 、一定量のデータを格納します 各私書箱は可能であると同じように メールの一定量を保持します。 の各要素に格納することができるもの 配列は、同じデータの変数であります intやcharと種類、ちょうど あなたの私書箱のように、 あなただけのものに合うことができます 同様のタイプの、 そのような文字や小型パッケージなど。 最後に、それぞれの要素にアクセスすることができます 直接インデックス番号によって配列、 私たちは郵便局にアクセスすることができます同じように そのメールボックス番号を知ることによってボックス。 うまくいけば、そのアナロジー あなたの頭を得ることができます 配列のアイデアで約 何か他のものに類推 あなたはおそらくしていること ですでにおなじみ。 Cでは、配列の要素があります 1からではなく、0から始まるインデックスが付け。 そして、これは本当に重要です。 なぜ実際に、これはCS 50であり、 頻繁に、なぜコンピュータ科学者 0からカウントされ、あります なぜなら、Cの配列の 常に0から始まりインデックス作成、。 だから、配列は、n個の要素で構成されている場合、 その配列の最初の要素 インデックス0に位置し、 配列の最後の要素 インデックスn -1に位置しています。 ここでも、中のn個の要素があるのなら、私たち 配列は、最後のインデックスは、nマイナス1です。 だから、私たちの配列には50の要素、持っている場合 最初の要素はインデックス0に配置され、 最後の要素 インデックス49に位置しています。 残念ながら、あるいは幸いにも、 あなたの視点に応じて、 Cはここで非常に寛大です。 それはからあなたを防ぐことはできません あなたの配列の範囲外に行きます。 あなたはマイナスにアクセスすることができました あなたの配列の3要素 または、アレイの第59要素、 あなたの配列はわずか50要素を持っている場合。 それから、あなたのプログラムを停止することはありません コンパイルが、実行時には、 あなたが発生する可能性があります 恐ろしいセグメンテーションフォールト あなたは、メモリにアクセスするために開始した場合 それは何の境界外です あなたはあなたを与えるためにあなたのプログラムを尋ねました。 だから注意してください。 何配列を行います 宣言のように見えますか? 我々は存在するように、配列をコード化するにはどうすればよいです 私たちは他の変数をコーディングするような? 配列への3つの部分があります。 タイプ、名前を、declaration-- サイズ。 これは、と非常によく似ています 変数宣言、これ ちょうどタイプと名前です、 サイズ素子であります アレイ用の特殊な場合、 我々はそれらの束を取得しているため、 同時に。 だから、型は変数の種類があります 配列の各要素になりたいです。 整数の配列にそれをしますか? 次に、あなたのデータ型はint型でなければなりません。 あなたはそれになりたいですか ダブルスまたはfloatの配列? データ型はdoubleまたはfloat型でなければなりません。 名前は何です あなたの配列を呼び出したいです。 あなたはこの巨大な名前を付けるために何をしたいです 整数や浮動小数点数または文字の銀行 またはダブルス、または任意のあなたがありますか? あなたはそれを呼び出すために何をしたいですか? かなり自明。 最後に進み、サイズ、 角括弧の内側に、 どのように多くの要素あなたが希望です あなたの配列が含まれているのが好きです。 あなたはどのように多くの整数をしたいですか? あなたはどのように多くの山車をしたいですか? したがって、たとえば、学生の成績40をint型。 これは、学生と呼ばれる配列を宣言します 40の整数で構成されてグレード。 かなり自明、私は願っています。 ここでもう一つの例です。 ダブルメニュー価格8。 これは、という配​​列を作成します。 構成され、メニューの価格は、 8ダブルス用のメモリに余裕の。 あなたはすべての要素を考える場合 型のデータ型の配列の、 そのようにする、例えば、単一の要素 int型の配列、同じようにあなた 他のを思うだろう int型の変数、 その我々はすべておなじみの操作 オペレーションで前に述べました ビデオは意味を行います。 そこでここでは、我々は配列を宣言できました Truthtableと呼ばれるブール値の、 これは10ブール値のための部屋で構成されています。 そして、ちょうど我々だけ割り当てることができますが好き タイプの他の変数に値 ブール、我々は何かを言うことができます Truthtable角括弧のような 我々は示している方法である2、 その真理値表の要素? の3番目の要素 真理値表、覚えているので、 我々は0からカウントしています。 だから、私たちが示す方法です 真理値表の3番目の要素。 Truthtable 2は、偽等しいです 我々はdeclare--可能性と同じように または私達は、むしろ、いずれかを割り当てることができ ブール型変数にはfalseになります。 また、条件で使用することができます。 (truthtable 7 ==場合 言うことです真)、 第8要素の場合 Truthtableの真です、 多分私達は、メッセージを印刷したいです ユーザーに、printfの( "TRUE!N");. それはTruthtableを言うために私たちを引き起こします 10は右、真等しいですか? まあ、私はできますが、それはかなりです 危険な、覚えているので、 私たちは10ブール値の配列を持っています。 だから、最高の索引その コンパイラは、私たちは9で与えています。 このプログラムはコンパイルしますが、 メモリ内の何か他のものであれば ここで、私たちは希望が存在します Truthtable 10が行くことを期待し、 私たちは、セグメンテーションフォールトを被る可能性があります。我々 それに逃げるかもしれないが、一般的には、 かなり危険。 だから私はここでやっていることは法律上のCです、 必ずしもそうではないが最善手。 さて、あなたが宣言するときと 同時に配列を初期化、 実際にはかなりあります そのあなたの特別な構文 配列を埋めるために使用することができます その開始値を持ちます。 これは面倒に得ることができます サイズ100の配列を宣言し、 し、その後、要素0を言わなければなりません これに等しいです。要素1は、この等しいです。 要素2は、に等しいです。 右のポイントは何ですか? それは小さな配列の場合、 このような何かを行うことができます。 ブールtruthtable 3が開いているに等しいです その後、中括弧とコンマ 要素のリストを区切ります あなたは配列に入れたいということ。 そして、中括弧セミコロンを閉じます。 これは、の配列を作成 サイズTruthtableと呼ばれる3つの、 、偽真、真の要素を持ちます。 そして、実際には、インスタンス化 私がここに持っている構文は次のとおりです。 やっと全く同じ 以下の個々の要素の構文。 コー​​ディングのこれらの二つの方法でしょう 正確に同じ配列を生成します。 同様に、私達は繰り返すことができ すべての要素の上に ループを使用して、配列、中の 実際、非常に強くお勧めします 在宅運動。 どのように配列を作成するのですか 100の整数、の 配列の各要素は、そのインデックスのですか? したがって、たとえば、私たちは100の配列を持っています 整数、最初の要素で、 我々は0を入れたいです。 二番目の要素では、1を入れたいです。 第三の要素では、我々はしたいです 2を入れて、などのように。 それは本当に良いことです 在宅には、それを行使する。 ここでは、それは見ていません あまりにも多くのように変更されました。 しかし、間それをで気づきます 角括弧、この時、 私は実際に数を省略しました。 あなたは非常にこれを使用している場合 特別なインスタンス化 構文は次のとおり作成します 配列、あなたが実際にしません サイズを指定する必要があり 配列の事前。 コンパイラは十分にスマートであります 実際にあなたことを知っています サイズ3の配列をしたいです、 あなたは、3つの要素を入れているので 等号の右側にあります。 次の4つを入れていた場合、それがなければなりません あなたのサイズ4の真理値表を与えられました。 などのように。 配列は、単一に限定されるものではありません かなりクールです寸法、。 あなたは、実際には多くを持つことができます あなたが望むようにサイド指定子。 したがって、たとえば、あなたが作成したい場合 ゲーム戦艦用ボード、 あなたが今までプレイした場合、あるゲームです 10×10グリッド上のペグと共演、 あなたはこのような配列を作成することができます。 あなたはブールを言うことができます 戦艦広場ブラケット10 閉じ角括弧広場 ブラケット10は、角括弧を閉じました。 そして、あなたはに選択することができます 10のようにあなたの心でこれを解釈します 細胞の10グリッドによります。 今、実際には、メモリ内に、 それは実際にはありません 100要素のままで、 1次元配列。 そして、これは、実際には、あなたの場合のために行きます 3次元または4または5を持っています。 それは本当にただ掛けるん indices--のすべて またはサイズのすべて 一緒specifiers--、 そしてあなただけの一次元の取得します そのサイズの配列。 しかし、組織の面でと 可視化と人間の知覚、 それは非常に簡単にすることができます グリッドで動作するように あなたはこのゲームで作業している場合 三目並べや戦艦のような、 またはそのような何か。 それは偉大な抽象化です、 代わりに持っていることの 三目並べを考えること 9のラインとしてボード 正方形や戦艦ボード 100マスの行として。 10グリッドまたは3で10 3グリッドによっておそらく より多くの容易認識します。 今、何か本当に アレイに関する重要。 私たちは、それぞれの個体を治療することができます 変数として配列の要素。 我々は以前のことを見ました ときに我々が割り当てられました 特定のブール値の真値 または条件式の中でそれらをテストします。 しかし、我々は全体を扱うことができません 変数として配列そのもの。 私たちは、例えば、1つの配列を割り当てることができません 割り当てを使用して別の配列へ オペレータ。 それは法的C.ではありません 私たちは何をexample--ために必要な場合 我々はその例でやっているだろう 別のものに1の配列をコピーすることであろう。 我々はそれをしたい場合、我々は実際に 上書きコピーするためにループを使用する必要があります 当時の個々の要素1。 私はそれは少し時間がかかります知っています。 したがって、たとえば、私たちはこれらのカップルを持っていた場合 コー​​ドの行、これは動作しますか? まあ、いや、それは右、ではないでしょうか? 我々がしようとしているため、 バーに食べ物を割り当てます。 それが仕事に行くのではないですが、 それが配列のだから、 私たちは今説明 それは法律上のC.はないこと 代わりに、私たちがしたい場合は 食品の内容をコピー 何であるバー、へ 我々は、ここでやろうとしています 我々はこのような構文が必要になります。 私たちは行くループを持っています Jから、5まで0に等しいです 私たちは、の繰り返しごとにJをインクリメント ループとそのような要素を割り当てます。 また、これはバーをもたらすであろう 一つ、二つ、三つ、四つ、五つ、あります しかし、我々は非常にそれこれをしなければなりません 遅い要素ごとの方法で、 代わりにちょうどによって 配列全体をコピーします。 他のプログラミングで 言語、より現代的なもの、 あなたは、実際には、単に行うことができます その構文をシンプルに等しいです。 しかしCは、残念ながら、私たちはしています それを行うことは許されません。 さて、もう一つあります 私が言及したいこと 少しすることができますアレイに関する 少しトリッキーはじめて 彼らと仕事。 私たちは、ビデオで説明 変数のスコープについて、 それを呼び出すC言語のほとんどの変数、 これらの機能には、値によって渡されます。 あなたはそれが何を意味するのか覚えていますか 値によって何かを渡すには? それは私達がのコピーを作っていることを意味します に渡されています変数。 呼び出し先関数は、関数 つまり、変数を受けてい 変数自体を取得しません。 それは自身のローカルを取得 で動作するようにそのコピー。 アレイは、当然のことながら、行います この規則に従いません。 むしろ、我々はこれを呼ぶもの 参照渡しされます。 実際に呼び出し先 配列を受け取るん。 それはを受信しません その独自のローカルコピー。 そして、あなたが考える場合 それは、これは理にかなっています。 アレイが実際に大きい場合、それ そんなに時間と労力がかかります の配列のコピーを作成します 100または1000万の要素、 それがためにそれを価値がないことを そのコピーを受信する機能、 それにいくつかの作業を行うと、 ただコピーして行われ、 それが持っている必要はありません。 それはもうぶらぶら。 アレイがあるため、いくつかの 大型で扱いにくいです、 私達はちょうど参照渡し。 私達はちょうどその機能を信頼 何かを壊さありません。 だから、実際には配列を取得しません。 それは、独自のローカルコピーを取得していません。 だから、これは何を意味しています、 その後、ときに呼び出し先 配列の要素を操作しますか? 何が起こるのですか? 今のところ、我々は、光沢ます なぜまさにこのオーバー たまたま、なぜ配列 参照によって渡されます 他のすべては、値によって渡されます。 しかし、私はあなたを約束し、我々はなります 戻ってあなたに答えを与えます 後でビデオでこれに。 ここにあなたのための1以上の運動です 私たちは、アレイ上で物事をラップする前に。 ここでのコードの束、それはです ない特に良いスタイル、 ちょうど私はその警告を行います。 ここにコメントはありません、 これはかなり悪い形です。 しかし、それは私がなりたかっただけですので、 画面上のすべてに適合することができます。 上部には、あなたは私が持っていることがわかります セット・アレイのための2つの関数宣言 そして、int型を設定します。 セットの配列は明らかに配列を受け取り その入力として4つの整数の。 そして、設定されたintが明らかに取ります その入力として単一の整数。 それらの両方が出力されていません。 出力、リターン それぞれのタイプは、無効となります。 メインでは、我々は持っています コー​​ドの行のカップル。 私たちは、整数型の変数を宣言 Aと呼ばれ、これに値10を割り当てます。 私たちは4つの整数の配列を宣言 Bと呼ばれ、要素0、1を割り当て、 それぞれ2および3、。 そこで、設定するための呼び出しを持っています int型と配列を設定するための呼び出し。 セットアレイとセットの定義 int型は一番下に、下に以下の通りです。 だから、再び、私はあなたに質問をします。 何をプリントアウトされます ここでメインの終わりに? プリントアウトcolがあります。アイム 2つの整数をプリントアウトします。 私はAの内容をプリントアウトだし、 Bスクエアブラケット0の内容。 ここでは、ビデオを一時停止し、時間がかかります。 あなたは何これを理解することができます 関数が最後に印刷されますか? うまくいけば、あなたが思い出す場合 値渡しの区別 この、参照渡し 問題はあなたのためにあまりにもトリッキーではありませんでした。 答えそして、あなたが希望 これは発見しました。 あなたがするように、本当にわからない場合 それは場合は、理由は、第二を取ります 戻って、私は何であったか確認します 配列を渡すについて議論 参照することにより、通過対 値によって他の変数、 うまくいけば、それが作りますよ 少しより多くの意味。 私はダグロイドだが、これはCS50です。