Placeholder Image

字幕表 動画を再生する



  • >> DAVID J. MALAN: All right.

    >> DAVID J.マラン:すべての権利。

  • This is CS50.


  • And this is the start of week 5.


  • And as you may have noticed, some of the material

    そして、あなたは気づいている可能性がある、 材料の一部

  • is getting a little more complex, the little denser.

    もう少しを得ている 複雑な、少しより高密度。

  • >> And it's very easy, especially if you've been in the habit for some time,

    >> そして、それは、特に場合、非常に簡単です あなたは、いくつかの時間を習慣にしてきた

  • to be trying to scribble down most anything we do, we're saying in class.

    ほとんどのダウン走り書きしようとしているように 私たちは何でも、私達はクラスで言っている。

  • But realize, that is not perhaps the ideal pedagogical approach

    しかし、それはおそらくありませんが、実現 理想的な教育学的アプローチ

  • to learning this kind of material, and material more generally.

    この種の材料を学ぶために、 材料より一般的。

  • And so we are pleased to announce that CS50's own Gheng

    そして、私たちはして満足している そのCS50自身Ghengを発表

  • Gong has begun to prepare a canonical set of notes

    ゴングが準備を始めている ノートの標準的なセット

  • for the course, the hope of which is that, one, these

    コー​​スの希望 これは、これらは、その一つである

  • not only serve as a reference and a resource

    だけでなく、として機能 リファレンスとリソース

  • for reviewing material and going back through material that might have

    材料の見直しや行くため バックかもしれない材料を通る

  • escaped you the first time around, but also so that your heads can be more

    あなたの最初の頃を免れたが、 また、ヘッドはもっとできるように

  • up than down, when it comes time to lecture,

    ダウン、ときにそれをよりアップ 講義を時間が来る、

  • so that you might engage more thoughtfully, as

    あなたが従事する可能性がありますように もっと思慮深く、として

  • opposed to more scribbly.


  • >> With that said, what you'll find on the website is such documents as this.

    >> ということで、あなたは何を見つける ウェブサイトは、このようなドキュメントである。

  • And notice, at top left, there's not only a table of contents,

    そして、通知は、左上にある、あります 目次だけではなく、

  • but also time codes that will immediately jump you

    だけでなく、タイムコード、その すぐにジャンプします

  • to the appropriate part in the video online.

    適切な部分へ ビデオオンラインでの。

  • And what Chang here has done is, essentially, documented

    そしてここでチャンは何を行っている 、本質的に、文書化されています

  • what happened in this particular lecture.

    この中で何が起こった 特定の講義。

  • And many of the lectures are already online now with this URL.

    そして、講義の多くは、 すでにオンライン今、このURLに置き換えてください。

  • And we'll continue to post the remainder of those by the end of this week,

    そして私達は残りを掲載していきます 今週の終わりまでにそれらの、

  • so do take advantage of that resource.


  • >> So without further ado, we started to peel back

    >> だから、前置きなしに、 私たちは戻って剥離し始めた

  • the layer that has been string for some time.

    されている層 しばらくの文字列。

  • And what did we say a string actually is last week?

    そして、私たちは、文字列を何と言った 実際に先週は何ですか?

  • So char star.


  • And char star, well, what did that really mean?

    チャースター、よく、どのような それは本当に意味した?

  • Well, all this time, if we've been calling a function,

    さて、このすべての時間、私たちはしている場合 関数を呼び出すされて、

  • like getString, and storing the so-called return

    のgetStringと、記憶などの いわゆるリターン

  • value of getString in a variable-- it's called

    内のgetStringの値 それは呼ばれていますvariable--

  • s type string-- we've been writing the line of code up there above.

    私たちが書いてきたstring-- Sタイプ そこまで上記のコードの行。

  • And it's only when I see my handwriting magnified here

    私は私を見ると、それが唯一だ ここに拡大された手書き

  • do I realize just how atrocious this is.


  • >> However, let's assume that, on the right-hand side

    >> しかし、のはそれを想定してみましょう、 右側に

  • is, nonetheless, a reasonable depiction of what's

    、それにもかかわらず、合理的である 何の描写

  • been going on all this time with getString.

    このすべてに起こって のgetStringと時間。

  • getString, of course, gets a string.


  • But what does that really mean?


  • It means it gets a chunk of memory from the operating system

    それはのチャンクを取得します意味 オペレーティング·システムからメモリ

  • by calling a function, called malloc.


  • But more on that later.


  • And then it populates that chunk of memory

    そしてそれは移入 メモリのチャンク

  • with the letters the user has typed in, followed by, of course,

    ユーザーが持っている文字で もちろん、続いて、タイプ入力

  • a null character, or backslash zero at the very end.

    null文字、またはバックスラッシュ 最後の最後でゼロ。

  • >> Meanwhile, on the left-hand side of this story, all this time,

    >> 一方、左側の この物語の、すべてのこの時間、

  • we've been declaring a variable, like s.


  • And that variable is what now will start calling a pointer.

    そして、その変数は今何をしている ポインタを呼び出して起動します。

  • It's not a box inside of which we put the string, Daven, per se,

    それは、その内部のボックスではありません 私たちは、文字列を入れて、祈る、それ自体が、

  • but rather we put in that square box on the left what exactly?

    むしろ私たちは、その広場に置く まさに左側のボックス?

  • Yeah?


  • >> AUDIENCE: The address of where it's located in memory.

    >> 聴衆:のアドレス どこにそれがメモリ内に位置し。

  • >> DAVID J. MALAN: Exactly.

    >> DAVID J.マラン:その通りです。

  • The address of where Daven is located in memory.

    祈るのアドレス メモリ内に位置しています。

  • And not where all of Daven is located, per se, but specifically the address

    そして、ここで祈るのすべてが配置されていない、 それ自体が、特にアドレス

  • of what?


  • Yeah?


  • >> AUDIENCE: First character.

    >> 聴衆:最初の文字。

  • >> DAVID J. MALAN: The first character in Daven, which, in this case,

    >> DAVID J.マラン:最初の文字 この場合には祈る、中、

  • I proposed was arbitrarily and unrealistically 1, Ox1,

    私は任意だっ提案 そして非現実1、OX1、

  • which just means the hexadecimal number of 1.

    これだけのことを意味 1の16進数の数。

  • But it's probably going to be a much bigger number

    しかし、それはおそらく起こっている はるかに大きな数であるように

  • that we might draw with a 0x as a prefix,

    私たちは引く可能性があることを 接頭辞として0xを、

  • representing a hexadecimal character.


  • And because we don't need to know where the rest of the characters of Daven

    そして、私たちはどこに知っている必要はありませんので、 祈るの文字の残りの部分

  • are, because of what simple design decision that was made many years ago?

    なぜならどんなシンプルなデザインで、ある 何年も前に作られた決断?

  • Yeah?


  • >> AUDIENCE: Backslash 0.

    >> 聴衆:バックスラッシュ0。

  • DAVID J. MALAN: Yeah, exactly.

    DAVID J.マラン:ええ、その通りです。

  • The backslash 0 allows you, albeit in linear time, to traverse the string,

    バックスラッシュ0ではあるが、あなたを可能にする 文字列を横断する線形時間、、

  • walk from left to right, with a for loop, or a while

    左から右に歩いて、 forループ、またはwhileと

  • loop, or something like that, and determine, oh, here

    ループ、またはのようなもの それは、ここで、ああ、決定する

  • is the end of this particular string.


  • So with just the address at the beginning of a string,

    でちょうどアドレスを持つので、 文字列の先頭、

  • we can access the entirety of it, because all this while,

    私たちは全体にアクセスすることができます それは、すべてのこの間のため、

  • a string has just been a char star.


  • >> So it's certainly fine to continue using the CS50 library and this abstraction,

    >> だから、継続して使用することが確かにいいのよ CS50ライブラリと、この抽象化、

  • so to speak, but we'll begin to see exactly

    いわば、私たちはよする 正確に見始める

  • what's been going on underneath this whole time.

    何が起こっているされています この全体の時間の下に。

  • So you may recall this example, too, from last time, compare 0,

    だから、この例を思い出すことができ、 あまりにも、前回から、0を比較し、

  • which didn't actually compare.


  • But we began to solve this.


  • >> But as perhaps a refresher, might I interest someone

    >> しかし、として、おそらくリフレッシュ、 私は誰かは興味があります

  • in a pink elephant today, also made by Chang?

    ピンクのゾウ、今日、 また、チャンによる?

  • How about you in front? [INAUDIBLE].

    どのように前のあなたは? [聞き取れない]。

  • Come on up.


  • >> And in the meantime, as you come up, let's

    >> そして、その間に、 あなたが出てくるように、してみましょう

  • consider for just a moment what this code was actually doing.

    ちょっと考えるもの このコードは、実際にやっていた。

  • It's declaring two variables up top, s and t, and calling getString.

    これは、2つの変数を宣言しています トップ、sとtとのgetStringを呼び出す。

  • This isn't a very user-friendly program, because it doesn't tell you what to do.

    これは、非常にユーザーフレンドリープログラムではありません それはあなたを教えていないため、何をすべきか。

  • But let's just assume we're focusing on the juicy part.

    しかし、ちょうど私たちがしていると仮定しましょう ジューシーな部分に焦点を当てた。

  • And then we do, if s equals equals t, it should say printf,

    sが等しい場合と、私たちは、何 Tに等しく、それはprintfの言う必要があり、

  • you typed the same thing.


  • Hello.


  • What's your name?


  • >> JANELLE: Janelle.

    >> JANELLE:ジャネル。

  • DAVID J. MALAN: Janelle, nice to meet you.

    DAVID J.マラン:ジャネル、 よろしくね。

  • So your challenge at hand for this elephant

    であなたの課題は、そう このゾウのための手

  • is to first draw us a picture of what's being represented in those first two

    最初の私たちに何の絵を描画することです これらの最初の二つで表現されている

  • lines.


  • So s and t might be represented how on the screen?

    だから、sとtは次のようになります。 どのようにスクリーン上に表現?

  • And you can just draw it with your finger on this big screen.

    そして、あなたはただでそれを描くことができます この大画面上で指。

  • >> So there's two halves to each side of that equation.

    >> だから、二つの半分にはありませ その方程式の各側面。

  • So there's s on the left, and then getString on the right.

    だから、左のsはそこだし、 その後、右側にのgetString。

  • And then there's t on the left, and then getString on the right.

    そしてtは、左側にあります そして、右側ののgetString。

  • So how might we begin drawing a picture that

    では、どのように始めるかもしれません その絵を描く

  • represents what's going on here in memory, would you say?

    何が起こっているかを表す ここでは、メモリに、あなたは言うでしょうか?

  • And let me let you explain what you're doing as you go.

    そして、私はあなたが説明させてみましょう あなたが行くように、あなたは何をやっている。

  • >> JANELLE: OK.

    >> JANELLE:わかりました。

  • Well, first, it would be asking you to get the input string.

    さて、最初に、それは尋ねることになる あなたが入力文字列を取得します。

  • And it would store-- oh, sorry.



    DAVID J.マラン:わかりました。

  • Good.


  • And this is called what?


  • Oh, OK.


  • Keep going.


  • I didn't mean to interrupt.


  • JANELLE: Sorry.


  • So it would input it into the address of-- not sure.

    だから、に入力してだろう アドレスがわからないof--。

  • I can't exactly remember the number, but I believe it was starting with 0.

    私は正確に番号を覚えていないことができ、 私はそれは0から始まると考えていました。

  • >> DAVID J. MALAN: That's all right, because I made the numbers up,

    >> DAVID J.マラン:それはすべての権利は​​、 私は数字を作ったので、

  • so there's no right answer.


  • >> JANELLE: Starting with the 0 arc.

    >> JANELLE:0アークで開始。

  • >> DAVID J. MALAN: OK, so element 0.

    >> DAVID J.マラン:そう、要素0。

  • Sure.


  • >> JANELLE: And then if was like just a two-letter--

    >> JANELLE:そしてあったか ちょうど二letter--様

  • >> DAVID J. MALAN: OK, back to you.

    >> DAVID J.マラン:OK、あなたに戻って。

  • >> JANELLE: So element 0, and then element 1 or element 2.

    >> JANELLE:だから要素0、および その後エレメント1またはエレメント2。

  • DAVID J. MALAN: And which piece of the picture are you drawing right now?

    その作品のそして:DAVID J.マラン 写真は、あなたが今、描いていますか?

  • The call to getString?


  • Or the declaration of s?


  • >> JANELLE: The declaration of s, I believe.

    >> JANELLE:宣言 Sの、私は信じています。

  • Oh, the getString, because it would be inputted into each [? area. ?]

    ああ、getStringで、それはなるため 各【に入力する?エリア。 ?]

  • >> DAVID J. MALAN: Good.

    >> DAVID J.マラン:良い。

  • Exactly.


  • Even though this effectively returns an array, recall,

    効果的なのに、この 配列、リコールを返し、

  • when we get back a string, we can index into that string using 01 and 2.

    私たちは、文字列を取り戻すとき、私たちはすることができます 01および2を使用して、その文字列のインデックス。

  • Technically, these are probably represented by individual addresses,

    技術的には、これらは、おそらくです 個別のアドレスによって表される、

  • but that's fine.


  • >> So suppose, if I can just fast forward to where we left off

    >> 私はちょうど速くできればそう、とします 私たちは中断したところに転送

  • last time, if one of the strings was g a b e,

    前回、1の場合 文字列は、B型電子gであった

  • backslash 0, thereby representing gabe's input, how might we represent s now?

    それによって、ゲイブ年代を代表するバックスラッシュ0、 入力は、どのように私たちは今のを表しているのでしょうか?

  • If this is the memory that's been returned by getString?

    これのメモリがある場合 のgetStringにより返されていますか?

  • >> JANELLE: Would it be represented by an arc?

    >> JANELLE:それは次のようになります アークが表す?

  • >> DAVID J. MALAN: By an arc?

    >> DAVID J.マラン:アークによって?

  • Well, no.


  • Let's just say, pictorially, let me just go ahead

    ちょうど絵で、としましょう​​、 私はちょうど先に行きましょう

  • and propose that, if this is s, this is the return value of getString.

    これはsである場合、このことを提案 のgetStringの戻り値です。

  • And you've drawn this as 0, 1, 2, which is perfectly reasonable, because we

    そして、あなたはその、0、1、2として、これを描いた われわれので、完全に合理的である

  • can index into the string, as such.


  • But just to be consistent with last time, let me go ahead

    しかし、単にと一致しているように 前回、私が先に行かせて

  • and arbitrarily propose that this is address 1, this is address 2,

    任意このことを提案する アドレス1であり、これがアドレス2であり、

  • this is address 3, and so forth.


  • And so, just to be super clear, what's going

    だから、ちょうどスーパーであると 明確な、何が起こっている

  • to go in s as a result of that first line of code, would you say?

    その結果として、年代に行くために コー​​ドの最初の行には、と思いますか?

  • >> JANELLE: Address 1?

    >> JANELLE:住所1?

  • >> DAVID J. MALAN: Exactly.

    >> DAVID J.マラン:その通りです。

  • So address 0x1.


  • And meanwhile, let me go ahead and duplicate much of what you've done

    そしてその間、私が先に行くとしましょう あなたがやったことの多くを複製

  • and add my own t here.


  • If I were to type in gabe again, a second time,

    私はゲイブを入力した場合 再び、二度目、

  • when prompted with getString, where, of course, is gabe going to go?

    のgetStringでメッセージが表示されたら、どこで、 もちろん、ゲイブは行くつもりですか?

  • Well, presumably--