>> [音楽再生]
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です。