字幕表 動画を再生する 字幕スクリプトをプリント 翻訳字幕をプリント 英語字幕をプリント [MUSIC PLAYING] [音楽再生] >> DAVID J. MALAN: All right. >> DAVID J.マラン:すべての権利。 This is CS50. これはCS50である。 And this is the start of week 5. そして、これは週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. もっと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. のgetStringは、もちろん、文字列を取得します。 But what does that really mean? しかし、それは本当に何を意味するのでしょうか? It means it gets a chunk of memory from the operating system それはのチャンクを取得します意味 オペレーティング·システムからメモリ by calling a function, called malloc. 関数を呼び出すことで、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. 私たちは、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. 16進文字を表す。 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. 文字列はただのcharスターでした。 >> 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. そして、それは申し訳ありませんが、ああstore--だろう。 DAVID J. MALAN: OK. DAVID J.マラン:わかりました。 Good. グッド。 And this is called what? そして、これは何と呼ばれている? Oh, OK. [OK]を、ああ。 Keep going. 続ける。 I didn't mean to interrupt. 私は、中断することを意味するものではありませんでした。 JANELLE: Sorry. JANELLE:申し訳ありません。 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? のgetStringへの呼び出し? Or the declaration of s? または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. これ等アドレス3、及びである。 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. だから、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, 私はゲイブを入力した場合 再び、二度目、