>> JASON HIRSCHHORN：欢迎 四个星期，每次一片。
我们有我们的忙提前一周。
本周一和周三 上周，你已经被引入到
指针，所以希望有 吹你的头脑，但是希望不是
让你太糊涂了。
如果有，我们将在在 节今天以及我们要去
做指针。
我们要投奔的堆栈，该堆栈 我们在讲课讲到
了，我们要去暗示 东西来在周三及以后
在内存管理方面。
最后，我们要商量了一下 关于斯坦福便携式语言，
这是你们的图书馆 利用这个星期来实现
问题集。
>> 正如我向你们上周 -
我想再次把这个向上滑动， 因为这是一个列表
可用资源 你CS50。
这些都是我们给你出的 框，这些是令人难以置信的
重要的是什么 下一张幻灯片将显示。
但在此之前我们得到的下一张幻灯片， 我想去过这些了。
>> 对于每一个讲座，也有 注释所采取。
这是演讲的摘要，但它 也有代码段和帮助
技巧和窍门。
所以，如果您要查看的演讲 - 希望你没有错过的讲座，但
如果你没有，你应该rewatch - 但 当您要查看的讲座，
一定要看看这些 讲义。
还有源代码在线 从每一个讲座。
>> cs50.net/shorts很短， 6至12分钟的短片。
你们已经看到了很多人。
也有视频，我们不分配 给你，但封面主题是
本课程涵盖的讲座。
所以，如果你想更新这些 主题，你看看这些短裤。
>> study.cs50.net有引 上一吨话题。
它具有视频。
它具有实践问题。
这是一个奇妙的资源。
快来任何问题，但 也考考时间。
>> 一对夫妇更多的资源。
有一个在man命令 终端给你一些
在一个特定的信息 函数或命令。
有谷歌，我最喜欢的资源 - 我最喜欢的资源。
我最喜欢的资源是最后一个， 我们会得到一个第二。
有cs50.net/discuss。
这是我们的班级论坛。
有办公时间周一至 星期四，上午8:00至11:00。
也有网上办公时间 延期的学生。
>> 最后，如​​果你需要什么， 有任何疑问，意见或
关注，你有我 联系方式。
与我取得联系，谢谢。
>> 所以当我暗示，下周三，一 从明天起一周，是你的第一
测验，测验为零，因为在计算机 科学，我们从零开始计数。
更多信息将在提供 明天的演讲，和一个手将
最终被发布到网上与更多 具体的细节，特别是
测验零的位置。
但它会将于下周三 而不是讲座。
有没有讲座下周一 因为它是一个节日。
>> 此测验将涵盖所有的材料 从零一周到五周，
所以通过这个星期，通过 讲课的明天。
材料包括讲座。
材料包括部分。
材料包括习题集，和 尤其是开始部分，
在哪里你走了习题集 通过一些背景资料
你即将覆盖。
不要期待通过这些习题集。
>> 为了帮助您所有的测验，下一 周一，即使它是一个节日，
该课程将举办 当然性检讨会议。
视频课程范围的审查会议 将在网上公布，如果你
不能够做到这一点。
此外，在第下星期二 我们会做一吨测验
审查并希望玩一些 危险为好，但我们要
是想在回答你所有的 的问题，但我会拿出
很多有帮助的问题 并根据信息
在10年测验。
我有一个什么样的一个不错的主意 要显示出来，以及如何的问题是
将要问，所以我们就去了 那些在节下周二。
>> 此外，我并没有把这个向上滑动 上周，不过这是后话，我们
上周做了。
这是我们如何走近了很多 的编码问题，我们做到了。
我想提炼出我们的方法 成一些简单的步骤，可以帮助
你解决一个编码问题。
>> 记得在上周，我们的二进制编码 搜索和我们做的第一件事
当我们需要编写二进制搜索 是我们在考虑我们
领导它是如何工作的。
我们没有画一幅画在课堂上，但 我问大家看短
视频，这也有一个图片 如何表示
二进制搜索工作。
第一，我们真正想做的事 明白了什么是画
图片来了解它的逻辑， 为了确保我们知道
这个东西怎么工作的。
>> 接下来的事情，我们在一节没有你 上周我们把我们的精神
模型，我们把它 到一些伪代码。
伪代码，同样，编程类 语法在口头上，而不是C代码。
甚至具体到C。我们只是把我们的 思路，并采取了英语，我们使用
把它表达出来，并写出来的 某种方案的前瞻性的方式。
所以，这只是逻辑的一部分。
我们把我们的逻辑照顾第一。
我们分手了这个硬编程 问题分为两部分，并且我们把
关心逻辑部分的第一。
>> 然后我们走近 语法部分。
记得在我们制定了 伪代码中，我们挑选出的部分
伪代码，我们知道映射到 在C中的特定元素，例如，
for循环，if条件，或更大 大于或等于运算符。
最后，我们做的最后一件事， 我们做的最后一件事，是
在C代码其实这个节目
>> 我们要经过这个过程 今天再次在一个比较大的
编码问题，将占用 散节的下半年，
但我想打好这个框架 在这里为你们。
这就是我们一直在逼近 在课堂上的问题，以及如何可能
你一直在处理这些问题 你自己以外的部分。
所以，我要离开这里了这件事， 我们会重提这个当
我们今天的编码后，去 系统通过这些步骤。
>> 最后，反馈。
如果您有任何意见对我来说， 网站是在这张幻灯片的顶部，
sayat.me/cs50。
给我一些反馈。
我得到了一些意想不到的反馈 从你们的最后一周。
你说你真的很喜欢 pseudocoding和编码，我们做到了。
也有人给了我一个链接到一个研究 这表明，等待
询问是否经过三至7秒 任何人有问题是最优
时间等待。
所以，如果你有你的秒表出来， 今天我要去尝试，等待7
秒后我问，如果任何人有 在移动之前的任何问题。
>> 所以，在我们继续之前，是否有人 有任何疑问，这么远吗？
>> 控制室给了我七秒。
OK，没人有任何问题，但 随时问他们，如果你这样做。
>> 首先，本周我们将要覆盖 指针，因为我们暗示了在
议程在类的开始。
你见过在课堂上的指针。
他们可能已经融化你的心。
这是确定的，这就是他们对我做了 数百名CS50的学生在你面前。
因此，在未来10到30分钟，我们 要通过这些指针
慢慢地，系统地。
如果在任何时候你有什么 问题，请提问。
我保证，在此您同行 部分和在家里看有
完全相同的问题。
>> 让我们来谈谈一般首先，我们才 潜入指针，有关变量
和数据，这我们已经 使用前被。
除了具有这些事 上一个幻灯片，我要去
画这些了。
>> 正如这张幻灯片说，内存中的数据有 两者的值和地址，所以我们
要表示的东西 在存储器中。
记得上周，当你看到 正在绘制数组，我们一般画
他们为一系列框，因此我们将 只是画一个变量为一个框
某处在存储器中。
这个盒子在这个例子中，我们将 称之为X，并且它有一个值。
在这种情况下，我们正在初始化 该变量的值50。
>> 您还会注意到，除了 刚刚的价值，这个变量x的
位置在存储器中。
事实上，你可能是有点 知道，内存有
有限数量的空格。
还有在你的只有这么多箱子 计算机可以存储的东西。
更好的是，让你知道的事情 被存储，每个方块有
特定地址，特定数量的 在这里你可以找到它。
就像新生都有自己的 在科学中心邮寄地址，
在内存中的每个方块有 一个特定的地址。
当你去到那个地址，你 能得到什么设在那里。
>> 我要完全任意的与 这个变量的地址，但我
接下来要说的地址是123。
现在，我不只是写1-2-3。
我写了为0x123。
该0X部分表示这是 一个十六进制数。
我们不打算谈论 十六进制很多今天，但要注意，
当我们参照的存储器地址， 我们称它们为十六进制。
所以每当我在谈论一个 地址，我会把那0x开头，这就是
只是说123是 十六进制数。
它的基数为16。
它不是以10为基数。
>> 没有任何人有任何 问题这么远吗？
>> 完美的。
所以这是一个变量。
我们已经看到过，但现在我们 出发去引擎盖下，看看
什么是实际发生的事情。
>> 所以，指针。
关于指针很酷的事情是， 不像有一个正常的变量
一些数值，某些整数，一些 性格，也许是一系列的
字符，如果我们谈论的 数组，指针具有值是
一个地址。
在屏幕上，我们与int x 等于50，我们之前创建的。
我已经画了框。
>> 让我们也画一个框。
这将是 - 哦，我的天啊。
我们需要一个新的标志。
也不遑多让。
>> 但我们要调用此框 - 这 在变量称为指针。
指针还具有一个地址。
这是在一个不同的地址。
这是一个不同的变量。
这不是要上 第一个的上面。
你可以不拿把两件事情 内部邮箱。
你不能覆盖初始 之一，所以我们要在
这里不同的地址。
我们给它的地址456。
但指针的值将是一个 地址，并且在这种情况下，它会
要解决的x变量的。
所以里面的指针，我们要存储 地址123。
>> 我用的语法来写它 - 我们 要去了语法在
第二个，但要知道，在这个语法 幻灯片是你可以使用的语法
设置此情况向上 -
之前我们得到的语法，不过，我 要明确到每一个人，
确保每个人都明白， 从指针变量作为不同的
有一个地址作为自己的价值， 不为整数或字符。
>> 到目前为止好？
>> 一般也，当我们这些图纸 的东西，我不只是要
绘制地址在这里。
我要去参加一个箭头从这个 框到其他变量，它的
指着给予这个意义上说，如果我 分别来看看地址123，如果
我是用这个指针来查找 它的指向，我会得到
此框在这里。
我会得到数50。
>> 是的，质疑？
>> 学生：如果指针存储的地址， 那么我们该如何选择阵列，和int
明星，或像一个char 明星，或什么？
>> JASON HIRSCHHORN：你能 重复的中间部分？
我失去了你。
>> 学生：你如何选择阵列， 就像一个int星级或char明星，或
什么，如果它总是 存储的地址？
>> JASON HIRSCHHORN：好问题。
我们如何选择什么，它实际上 指着若
总是存储一个地址？
如果不要写成整数星级权利 在这里，我写的char明星，这将是
指着 -
这是我们会写，如果我们想 它指向一个字符。
深，深跌的一和零 世界，那整数，即字符，不
真正的问题。
但在C而言，它要你 是相当具体的条款
类型你指向的东西。
的水平，我们正在编程， 我们将写
事情类型我们点 尽管它总是一个
解决这里面框。
你有问题吗？
确定。
>> 现在我们要看看 一些语法指针。
在这张幻灯片中的第一行 -
整型明星，空间，指针 -
初始化并创建 -
没有初始化，而。
不设置它等于什么， 但它创造这个指针。
所以在我的图的形式 -
让我们去这一边 -
首行，诠释明星 指针，创建一个框。
这个箱子是指针变量， 它是在一个地址。
我们给它一个不同的 地址999。
>> 这是所有行的作用。
我们之前已经看到这一点。
这就像任何时间，如果我只是 写诠释x那里，它会做
同样的事情，创造 一盒名为x。
在这种情况下，我们给 它不同的类型。
所以它不会是一个int。
这将是一个int明星， 所以此框将是一点点
比如果它是不同的只是 是一个字符，例如。
>> 因为字符，召回，是 在内存中只有一个字节。
指针是四个字节。
所以这个盒子看起来有点 不同的，如果我们写整型明星作为
反对为char。
但除此之外，我们创建了一个 框，它是在一个特定的地址。
这是所有第一线一样。
>> 代码的第二行，诠释x等于 50，再创建另一个盒子x在
不同的位置。
我们会给错位111。
这实际上是初始化 除了指针
创建框。
我们把50这里面框。
>> 的代码，指针的第三行 等于地址X。
该地址操作装置 一个非常具体的事情。
每当我们把符号在前面 一个变量名的，我们在说给
该变量的我的地址。
所以，当我写符号X，这是 说给我x的地址，
这种情况下，111。
>> 是吗？
>> 学生：这是可以接受的，如果我们 碰巧知道这个地址
特定的变量只 说指针等于0x111？
>> JASON HIRSCHHORN：所以，如果你知道， 这是在111，你可以写
指针x等于这个十六进制 号，但我看不到一个办法，你
会知道它是什么，所以这 为什么我们使用这个语法。
但同样，这符号X，符号 是说给我的这个地址
变量，就像任何相等 它的标志，这是该存储
值里面的指针。
>> 所以每当你看到的符号， 认为这是给我的地址
这件事情。
符号x为给我 这种X框的地址。
同样，如果我们这样做符号指针， 那么我得到什么？
>> 学生：指针的地址。
>> JASON HIRSCHHORN：地址 的指针。
具体是什么？
>> 学生：0x999。
>> JASON HIRSCHHORN：999。
符号指针将给予 我在这种情况下999。
＆符号在任何前 变量给你
该变量的地址。
当然，我并不真的在乎 该指针的地址。
我关心更多关于 这个变量的地址。
>> 最后，我们将在最后一个符号 看到实际上是相同的符号，
该星号。
但在这最后一行，这是 用有点不同。
请注意，在这最后一行 它旁边的变量。
正如前面是旁边的类型，它 在这种类型的一部分​​，我们正在创建
这种类型的整型指针，现在 明星意味着什么
有一点点不同。
这意味着去治疗价值 -
整型指针 -
对待值这个变量一样 一个地址，去那个地址，
给我的价值。
>> 因此，星号表示，再次治疗 值和指针作为地址，去
该地址，并返回该值。
在这种情况下，该值为50， 所以这行会的printf 50。
是吗？
>> 学生：所以，如果我们想这样做的 这在过去是没有声明为
指针，如x上，并且该值是50， 它会尝试去解决50，
或将它只是给我们一个错误？
>> JASON HIRSCHHORN：如果我们做明星的x， 并试图对printf的是，什么样的
编译器会做，或什么程序 它运行的时候会做，这是
将治疗50就像一个地址，然后转到 解决你的程序号50。
一般来说，当你要这些 随机地址，你不会
去到一个地址的东西 是不错那里。
你会去一个非常糟糕 解决你不应该去
对，和你的程序 将要崩溃。
>> 所以，是的，你说得对。
它会做同样的事情，但 当我们试图去地址，我们
没有要求，否则我们不会有 宣派，或者只是随机的
地址，我们几乎总是在 麻烦，我们的程序崩溃。
>> 这是否回答你的问题？
>> 学生：是啊，我猜 我有一个又一个。
所以，如果你冷只是做到这一点，它会 去那个地址，有什么
点声明一个指针作为的 指针，如果我们可以只说一个指针
等于符号的东西？
然后它会像一个有意义的 地址，我们可以去那里，对不对？
>> JASON HIRSCHHORN：你能 重复的问题？
>> 学生：我们为什么要申报 指针作为一个int明星是否会
工作只是把它声明为一个像 定期诠释，因为它仍然会
有一件事，可能是 然后间接引用，对不对？
>> JASON HIRSCHHORN：那么，为什么我们 它声明为一个int，而明星
而不仅仅是一个整数， 保存这个数字的呢？
>> 学生：是啊。
>> JASON HIRSCHHORN：因为 当我们使用的东西 -
伟大的问题 -
当我们使用的东西，每当我们使用 一个指针，我们要
对待像指针，其他 事情是怎么回事，我不是要去
现在，它有助于进入 如果程序知道
这个东西是一个指针。
它将不同的方式对待它以某种 其他的方式，是无关紧要的对我们来说，
但我们要使用它就像一个 指针，我们应该说，我们要
使用这个作为一个指针。
>> 以便基本上 指针是如何工作的。
它并不比更复杂 这一点，但遗憾的是，就变成了
很多更复杂时， 我们把它付诸实践。
>> 接下来，我们要做的事情 东西蛮大的。
而不是仅仅是用几行 网上的代码，我忍了4，5，
6，7，8 9，10行代码。
和而不是编码这些了你 计算机或运行此程序
您的电脑上，我要你拿出 纸和一支铅笔或一个表
笔，并找出各是什么 这些代码的行做。
先从左边的列，从工作 从上到下，它初始化
有很多这些变量，并 然后再通过每一行代码中
右列和图 出会发生什么。
我给大家3分钟 启动这个你自己，然后我们将
过这作为一个群体。
>> 让我们开始去 在此作为一个群体。
这是确定的，如果你还没有完成。
我要开始用左手 柱的侧面，然后我要去
请你们在这里，勇敢 你在这里你们当中了，执行
一行上的右手侧代码 列，然后我们将继续努力
我们的方式通过。
>> 因此，首先，代码，int值，第一行 x等于2逗号y等于8逗号Ž
等于12，创建三个变量。
我做这一切在同一行。
这是一个方便的语法来创建 的多的东西
同类型在同一行。
>> 因此，我们有三个箱子。
大家可以看到这三个， 或者是太低了？
确定。
>> 我们有X，Y，Z。
及x，我们得到2。
在Y，我们得到8。
而在Z，我们得到12。
漂亮的标准为止。
>> 下一步，我们要创建另一个 箱，另一个变量。
这是一个int指针。
这就是所谓的指针按x。
我们将绘制在这里。
>> 而什么是我们存储 里面的指针X'
>> 学生：x的地址。
>> JASON HIRSCHHORN：x的地址。
在这种情况下，不知道 x的地址。
它可以是任何东西，但我要去 做的东西了，现在做它
我们更容易。
我们将放置X在111。
所以，这得到0x111，我们会给 它一个很好的箭头来表示
它的指向为x。
>> 同样，我有指针 y和指针的z。
他们得到的值。
我们会给这个0x222，0x333。
>> 这是我们在初始设置 列的左侧。
我们创建了三个整数， 我们创建了三个三分球。
里面的每个指针，我们保存地址 三个初始之一
我们创建的变量。
>> 现在，上的右手侧 专栏中，我们使用的是星号
符号中的一些不同的方式 所有这一切都没有用它来
提领东西或去 到一个特定的地址，并
返回值存在。
>> 有人能告诉我是什么 代码的第一行呢？
有人举手。 谁一直没有发言。
你呢？
>> 学生：设置Z到16。
>> JASON HIRSCHHORN：它的设置Z到16。
所以z等于x次年。
在这种情况下，它只是乘法 我们正在做的。
所以z等于x次Y， 2次8是16。
完美的。
因此，我们将更新此。
Ž等于16。
>> 代码X空间是第二行 星级等于空间年。
这是什么行代码呢？
杰夫。
>> 学生：x等于x次Ÿ？
>> JASON HIRSCHHORN：完全正确。
这是速记符号 为x等于x次年。
你可能已经看到的东西 如x加等于y？
这是x等于X加Y。
在这种情况下，我们正在做的东西 有点不同，x等于x次年。
>> 那么什么是我需要在这里更新？
>> 学生：x是16。
>> JASON HIRSCHHORN：x是16。
>> 变化的绿色是什么 我们迄今完成的。
接下来，我们得：y等于星级指针按x。
有人可以走我通过什么 这行代码呢？
什么是这行代码呢？
从一开始走我走过。
>> 学生：它需要什么指针x是 指向，那就是作为价值
由尖，和 它存储在年。
>> JASON HIRSCHHORN：优秀。
我要重复一遍。
你做了出色的工作，但这样我们就可以 强调它，星号表示治疗
事情在变像 一个地址，然后转到它。
所以，对待事情的指针x像 地址，去它，把该值
16，然后我们只是节省 它在变量y。
所以，现在Y获取覆盖， 并且它现在是16。
>> 码，星形指针的下一行 强调x等于x次年。
这是什么行代码呢？
同样，如果你是一个有点失去了这里， 从右到左进行评估。
那么盟，什么是正确的 那做右手边？
>> 学生：右手边刚 乘无论是在
框是x和y。
>> JASON HIRSCHHORN：这就是16 16，有什么是平等？
>> 学生：256。
>> JASON HIRSCHHORN：256。
哪里是我们节省了256？
>> 学生：你将其保存在什么 指针x被指向，
这是X框。
所以，现在，x变成256。
>> JASON HIRSCHHORN：所以的明星， 再次，是指去。
我们去什么指针 x被指向。
它指向X，并有 我们节省了价值256。
>> 关于具体的一个什么问题吗？
我们还没有看到使用上的明星 左手侧，然而，
赋值运算符。
>> 所以这是代码的第四行。
代码第五行，有人可以 谁一直没有发言，给我的
第五行的代码，或步行 通过它和我在一起？
安妮，它是什么呢？
>> 学生：改变指针的值 X要指针y的值。
>> JASON HIRSCHHORN：这是 完全正确。
指针y的值是这个地址 在这里，我们要存储在
变量指针按x。
因此，这成为222。
我要去移动的箭头， 同样，以表示它现在
具有不同的地址。
>> 所以，现在指针下划线x 和指针下划线ÿ
具有相同的值。
这就是这一行呢。
所以基本上，他们是 都指向为y。
如果我们只是有我们的三分球，而我们 真的不知道该变量，我们
将失去按x。
但幸运的是，有x保存 在这个函数中，所以我们还是
知道其中x是。
但我们会看到，问题来了 以后，如果我们失去了一个指针
什么东西，我们可能实际上并不知道 它在哪里，或者能够恢复它。
但是，这是未来。
所以，现在，这是 完全正确，安妮。
>> 最后，代码的最后一行。
有人可以给我什么样的 代码的最后一行呢？
是吗？
>> 学生：它乘以什么是 指针Y，那么16倍16 -
>> JASON HIRSCHHORN：16 没有指针年。
>> 学生：嗯，它关系到该地址， 发现它，然后乘以
通过同样的事情 - 它的 同样的事情与指标Z，乘
值，并将其存储在X。
>> JASON HIRSCHHORN：完全正确。
那么我需要更新？
我应该x为？
>> 学生：左上，256。
>> JASON HIRSCHHORN：什么 我将其更改为？
很抱歉，我们就回去了。
>> 学生：它应该仍然是相同的。
>> JASON HIRSCHHORN：是的，它实际上 还是等于256。
但是，这是完全正确的。
让我们打破这种下降。
我们将看到在这里，这个东西在 括号，明星指针Y，即
把什么在指针y为 一个地址，去那
地址，取16。
所以，现在我们有一个16，我们很 相乘，通过对
在Z同样的事情。
去那个地址，服用16。
16倍，16是256，我们正在存储 这里面的x。 X里面已经发生了
等于256，所以我们不 要作出改变。
>> 你没有这个文件，现在， 但在此源代码
部分，这将在网上进行公布 cs50.net/sections，我写的所有
的这件事，正是我们所做的。
我其实包含了一些其他的 信息在这里，我们是
要经过在一秒钟。
>> 我们做这些操作，你可以看到 在这里，然后打印出
得到的值的特定变量的 已被改变​​。
此代码是已经被写入。
我要运行此代码。
>> 现在让我们遍历输出。
让我们从头开始。
x值等于为2。
这应该是有意义的。
这正是我们最初 初始化它。
>> 的x地址是这个疯狂的事情。
再次，我们却看到，即使它 看起来有点疯狂的在第一次
检查中，我们看到， 0X就在那里。
这是一个十六进制数。
>> 然后我们看到所有的 这个疯狂的东西。
有一个B和一个f，和 还有一个C在那里。
这些都不是正常的零通过 九位数字，但因为十六进制
是基地16，你的实际需要 一对夫妇的其他符号
代表每个数字。
所以，再一次，我们不打算谈 十六进制太多，但知道
当你写的十六进制 数字，你会从零看到什么
到9加东西 从a到f。
因此，即使他们不是所有零 通过9号，这是一个
号，这是一个地址。
并且它可以被表示为 基地10，如果我们想要。
>> 指针的x这里的值是 还一个十六进制数，并且什么是
它同样的？
什么是这个数目一样？
>> 地址X的，对不对？
该生产线正上方，这两个 地址是相同的，这就是
我们所期望的。
x的地址是 指针的x值。
>> 接下来，我们的地址 指针的x，便是
再次，一些随机数。
如果我们要检查它，我们注意到 它分享了很多
相同的数字作为其他的。
这是不同的，但它的股票 很多相同的数字。
记得谈论缓冲 溢出错误？
当你可以在写的东西都是 靠近你的内存，如果你去
超出阵列的界限。
同样，我们不打算谈 那现在，但对于那些你
好奇，这些东西实际上是 非常接近彼此。
这些箱子是相当接近 彼此在存储器中。
>> 最后，指针x指向的 值，当然，它是2。
我这样做明星。
我们遵循的指针地址 x起初，它
返回x的值。
>> 最后，我们清楚地看到 我们只是做了。
首先z为16，则x 是16，则y为16。
x最终成为256就在这里。
又一次，x没有改变 通过代码最后一行。
它仍然是256。
>> 如果你想在自己重复这 再次，或者通过它，或
改变一些值了，我已经 已经写了这个代码。
您可以进行更改代码 而实际上看到这些变化如何
在现实生活中发挥出来。
>> 在我们继续之前的指针，不 任何人有任何问题吗？
>> 确定。
每个人都可以拿一只手，和 把它在空气中，和 -
闭上你的眼睛 -
把你的右手在空中为 拳头，并给我一个竖起大拇指，大拇指
向下，大拇指中间，怎么舒服 你是指针为止。
闭上你的眼睛。
>> 确定。
你可以把你的手了 然后打开你的眼睛。
谢谢。
>> 我们要继续前进。
我们将继续谈论 三分球，但我们要谈
关于他们在一点点 的不同的上下文。
我们要谈 数组和指针。
上周，记住 我吹你的头脑？
人的大脑，他们离开 他们在这里的地板上。
我敢肯定吹 那个人的心灵。
这是一个糟糕的玩笑。
>> [笑]
>> JASON HIRSCHHORN：我要去 工作这一点。
但无论如何，我们发现字符串 出为数组。
数组实际上是指针。
>> 这是什么意思了吗？
那么，如果我们创建一个6组 字符，这行代码
确实就在这里 -
字符，数组，打开支架，六，密切 支架，分号 - 再次，创建一个
数组的六个字符。
填充它。
>> 我有一张它的照片就在这里。
这些盒子，我们看到，它填补 有一些字符和空
终止底。
和向下跌破，这就是我想要 你指挥你的注意力。
的第一盒 -
我们已经这样做过。
我们实际上已经做到了这一点 在每一个问题设定。
可以参考我在第一个框 这个数组作为数组支架为零。
我们已经做了一百万次。
>> 我其实可以参考 同一个盒子的另一种方式。
我可以把它称为星阵。
因为数组，如果我们实际上是 打印出什么等于数组，数组是
一个地址，它是一个地址 在此数组中的第一个框。
让星算把什么 存储在数组作为地址，去
该地址，并返回 该值在那里。
星阵将返回f就​​像 阵列支架零返回f。
>> 再次，到处都是我们一直在写 阵列支架零，星阵会
也做了同样的事情。
事实上，阵列支架是零 只是我们的糖衣
究竟是什么发生的事情。
这真是星阵是更 正确的做法，如果有一个正确的
这样，想到什么 实际发生的事情。
>> 所以，这一切都很好，但 这里的那里得到神奇。
我们去的第二个字符 在这里，这个零。
应该是一个O，但我们会 给它一个零。
我们提到了前， 在一个数组第二个框中，为数组
支架一每当我们已经反复 通过阵列。
>> 还有另一种方法来指 它，这就是下面的人。
那颗星，开括号，数组 加1，关闭括号。
所以，因为数组的布局 - 这些 箱子都紧挨着对方
在内存中 -
星阵去的第一个。
所以，如果我们要采取阵列 地址，把它加1，然后去
新地址时，这是怎么回事 要对旁边的事
原来的地址。
>> 是吗？
>> 学生：所以，如果是数组，而不是， 为字符，这将是整数，那么
你必须增加 4每次？
>> JASON HIRSCHHORN：这是 一个很大的问题。
我想画的东西，然后再我 要回答你的问题。
>> 为了绘制这个在屏幕上真的 越来越快速的前
的问题，我们有我们的阵列 -
而如此下去，但我只打算 专注于第一对夫妇的。
在内存方面，还有一个盒子 我们创建的时候，我们
初始化此数组。
这是数组变量， 并且它是一个地址。
它是，实际上的地址 第一件事情，第一个框。
所以这个箱子是什么地方。
这六个箱子在别的地方。
>> 当我们这样做阵列支架为零，我们 要到达这里的第一件事。
当我们做星阵，我们将 得到确切的同样的事情，该值
该数组是指向。
>> 当我们这样做阵列支架1，我们要 获得第二个盒子，而且还
因为指针以外的 括号，首先我们要添加
1到这个地址，然后我们要去 遵循这一点，给我们
第二个盒子。
等等，等等。
>> 阵列加2是要增加2到这个 在这里讨论，因为再次，地址
只是数字表示 为十六进制，经常。
所以加2到它，并按照该 第三个框，这恰好是，当你
可以看到，两个空间离 从第一个框。
>> 但愿，这使得它减少混乱 而不是更加混乱。
但并使它更加混乱？
再次，我会去你的 问题在一秒钟。
并使它更困惑 任何人，或没有任何人有任何
关于这个问题的想法 数组作为指针？
>> 太棒了。
此外，它会很神奇 如果你有问题。
但在继续讨论你的​​问题。
>> 现在的问题是在内存中的整数 占用四个字节，所以四盒。
如果我们认为一个盒子为一个字节， 整数占用了四盒。
>> 所以说这些都是整数了。
这是一个int数组就在这里。
我会弥补一些 随机地址。
因此，如果这是一个int数组中， 第一种可能是10。
下一个的四盒了，因为 整数是四盒大。
还有的是10，11，12，13，所以 这个人会是一个14。
这个人会是一个18。
这一个将是22，依此类推。
>> 如此反复，字符是一个字节。
他们是紧挨着对方， 所以这个图上我们在谈论
之前完美的作品。
>> 但你刚才提出 整数的情况。
好吧，如果我说1到这一点， 它会去到11。
这将会是在这中间 INT，如果我跟着它真的
特别是这样的。
实际上，我是要去盒 由框在存储器中。
>> 关于这种类型的很酷的事情 指针运算的程序
足够聪明，知道你的意思。
当你添加1到存储 这是指向一个地址
整数，它实际上并不打算 添加一个块以上。
这将超过新增四个街区。
这将是规模数量 为你买的大小。
>> 这可以追溯到柯蒂斯的问题， 为什么我们做的诠释，而明星
不是char明星？
是你的问题？
有人问早些时候，对不对？
为什么我们做整型明星而不是char 明星如果它要解决不
不管是什么？
这就是来帮助我们与此 类型的指针算术。
如果我们的东西声明为一个char明星 但它确实经历
整数，当我们增加了1，那只 移动一个方块的，而不是
4，我们在逻辑上希望 它搬过来。
>> 如此反复，在指针的算术运算，当 我们正在处理这些事情，比如
地址，然后加上或减去 他们，然后按照他们
弄清楚什么是内存怎么回事， 我们添加到他们的数量被缩小
按事物的类型的大小 他们指着。
>> 所以，如果他们指向一个整数 -
我知道我重复自己 -
但如果他们是一个整数，你 究竟要动议4
箱子在每个时间。
如果他们是一个字符，你 要移动一个框。
如果他们是一个很长很长，这是八 字节，你要动
8盒以上。
的无论大小 数据类型，谁知道？
其实并不重要 我们的目的。
所有我们需要知道的是实际， 这道数学就在这里，只是增加1
将得到我们的第二个对话框，不论 是在什么类型的东西
那第二个盒子。
>> 我希望有一些类型的问题 在这里，因为这是一个很大的，我
不能做一个完美的 工作在解释这一点。
真的吗？
没有问题？
对于观众在家里 - 我们走吧。
>> 学生：如果你是做一个数组 在一个函数，你想让它
返回一个数组到别的东西， 你会怎么回呢？
>> JASON HIRSCHHORN：非常好的问题。
所以，如果你想使一个数组中的一个 函数，然后返回数组 -
所以我们说，我们会做一个数组 在一个称为主函数。
主要调用这个函数，这 函数创建数组，然后
它返回到主。
>> 现在我们已经看到的东西 之前与此类似。
在那里，我们看到类似的东西 其中主要创建数组，然后
该函数处理呢？
之前我们有什么写的 这样做了吗？
>> 学生：排序？
>> JASON HIRSCHHORN：排序 已经做到这一点。
15场比赛也做了。
在排序中，我们通过在阵列中，在 干草堆，然后我们整理了由
破坏性更新不同 部分在该数组。
因此，我们把我们的原始数组 - 记住，这些参数的一个
排序功能是数组 -
>> 学生：这不就是一个全局数组？
>> JASON HIRSCHHORN：对。
是啊，我们要回到那里。
但就在它被创建 -
它是一个全球性的，或者是它 在函数产生的？
让我们来看看。
我们可以回答这个问题。
>> 它看起来像它不是一个全局数组。
它创造就在这个行 一个整数数组，然后它
传递给我们的排序功能。
因此，这不是一个全局数组。
它的主要创建，通过 我们的排序功能。
我们的排序功能破坏性 更新它，并返回它。
正如我们所看到了顶部，排序 -
哦，我的天啊，对不起。
>> 学生：排序只是返回是否 或者不是找到了吗？
>> JASON HIRSCHHORN：对。
抱歉。
实际上排序 - 让我们打开了。
排序是无效的。
排序不返回任何东西，因为 排序破坏性更新数组，
原始数组。
>> 所以，这就是我们以前见过，但 你的问题是什么，如果排序
实际上创建数组？
>> 学生：请参阅返回更新 数组，或者类似的东西。
>> JASON HIRSCHHORN：另一件事， 本来可以做的是所谓的主
的功能。
该函数的任务是创建一个 的东西，数组阵列
整数，然后返回 数组它的创建主。
>> 所以，当我们交谈时以前见过 有关栈，我们要
今天晚些时候谈了一下，一旦 函数返回时，一切是
在该函数中所有的，创造 它的局部变量，走开。
我们以前见过的范围这一想法。
这就是为什么我们已经创建了全球 变量有时，为了躲避这个
事情要离开时的问题 其函数返回。
>> 你会怎么做在这种情况下是 函数将创建数组不一样
在堆栈中的局部变量。
它会在不同的部分创建它 内存，可以让事情要
即使功能已恢复保存 和功能框，则
堆栈帧，已经离开了堆栈。
>> 我将使用一些 术语在这里。
你不会听到这个 直到明天，但该地区
内存被称为堆，并 我不想去考虑这样做。
但是，该函数可以做，再次 过于简单化潜在的，是创造
在以不同的空间排列 内存，实际上在那里停留
只要你想让它呆在那里， 它会传回主指针
要保存在数组 内存的其他部分。
因此，它使一些箱子别处 不被摧毁时，
函数返回并传递回主 一个地址给该组的盒子。
>> 这可能不是一个足以 回答你的问题，但
将要探讨的明天更 当你们聊
有关讲座堆。
>> 让我们继续前进 - 哦，我的天啊！
这是一个海豚！
多么可爱的是什么？
上帝！
他们是我最喜欢的动物，所以 他们确实是可爱的。
我有三个海豚毛绒动物。
但足够的了解我。
>> 你都有你的电脑 在你面前打开。
这里是你的编码任务。
我们将开始与伪代码， 虽然，所以不要太激动。
>> 你需要编写一个程序，需要 一个且只有一个命令行
的说法，这就是数 海豚被训练。
这个数字应大于0。
>> 接下来你要允许 教练进入了年龄
这些海豚。
每个年龄段，再次，应 大于0。
而所有这些年龄应该 被存储在数组中。
>> 为了获得一个时代，但是，你需要 调用以下函数
原型 -
整型明星，空间，getAge，括号， 无效，关闭括号，分号。
>> 最后，我要你打印出来 最古老的海豚的年龄。
如此反复，你开始写之前， 代码，有一张纸或有
gedit中打开，如果你想，写 一些伪代码这一点。
在三分钟内，我们将 走过去的伪代码。
你们还有三分钟 代码，然后我们就去了编码
它在一起。
>> 如果您有任何问题，因为 这是不明确的，提高你的手，
我会回来的，我很高兴 回答你的问题。
但开始，走三分钟 写伪代码，以确保您
理解这个问题的逻辑。
>> 让我们来刺在 伪代码为一组。
我要在黑板上写这 你给我的伪代码。
谁愿意给 我的第一行？
第一行的也许是最简单的， 所以如果你有不
还参加了，从这里开始。
什么是伪代码的第一行。
>> 学生：第一行是来检查 那你得到的参数数目。
>> JASON HIRSCHHORN：完全正确。
检查数量的参数，第一个 的事情，我们需要做的。
接下来呢？
>> 学生：检查该命令时， 第一个参数是大于0？
>> JASON HIRSCHHORN：检查第一 参数大于0，是的。
下一行，继续前进。
>> 学生：那么你很可能要 该命令行参数存储到
一个变量，或者你可以只 转到下一个步骤。
>> JASON HIRSCHHORN：是的，同样，我们将 有一个字符串在这里，但我们希望有一个
整数，因为它是一个数字， 所以我们需要做的
字符串转换为整数。
>> 学生：X，Y。
>> JASON HIRSCHHORN：这是正确的。
因此，我们将编写一个。
字符串 - 哇，看那个标记。
这就是我们所需要的第二件事 这样做，拿绳子，
把它变成一个int。
下一步是什么？
>> 学生：与创建整型数组 第一个命令行的大小
论点是不是编程？
>> JASON HIRSCHHORN：对不起？
>> 学生：只需创建一个int数组， 并使其成为命令的大小
那你有行参数。
>> JASON HIRSCHHORN：创建 大小的数组 -
我们会做精氨酸，无论 这样的说法了。
好不好？
下一步是什么？
>> 因此，我们有数组，允许 教练员进入一个
年龄每海豚。
为了得到一个时代，调用一个函数 用下面的原型。
因此，我们有我们的数组。
什么是我们需要做什么？
>> 学生：对于n海豚？
>> JASON HIRSCHHORN：确定。
我打算写为每个。
对于每一个海豚，是什么 我们需要做什么？
来吧？
>> 学生：调用该函数。
>> JASON HIRSCHHORN：通话 的功能，确定。
>> 学生：在pseudocoding，你应该 这样定义在一个单独的函数
伪代码块？
>> JASON HIRSCHHORN：所以，是的。
让我们做伪代码的一个单独的盒子 在这里，伪代码getAge。
所以这个函数，对于每个海豚 我们称之为getAge，并
getAge返回的东西。
那么，我们应该把 我们回国的事情吗？
它返回一个int指针，对不对？
这是返回类型，根据 该函数的原型。
那么，我们是否把 该整型指针。
>> 学生：入阵。
>> JASON HIRSCHHORN：入阵。
这听起来不错。
调用getAge，把回报 在数组中的值。
>> 让我们暂停getAge一秒钟。
我们会回来的。
我会让你开始 我这句话，马库斯。
但是，我们已经得到了每个年龄。
我们已经把他们所有的数组中。
我们做的到底是什么？
我们如何完成主？
什么是我们需要做的最后一件事？
奥尔登？
>> 学生：我们可以对它们进行排序，并 然后打印的最大发现。
>> JASON HIRSCHHORN：我们可以 对它们进行排序，是的。
那么我们该如何排序？
>> 学生：我们可以只喜欢 -
>> JASON HIRSCHHORN：我们是否需要 在此排序，但？
>> 学生：我想不会。
>> JASON HIRSCHHORN：确定。
之前你这样做。
什么是第一方式 你写的搜索？
>> 学生：我们可以只检查每个 人反对对方之一。
>> JASON HIRSCHHORN：让我们做到这一点。
让我们通过搜索每一个和公正 跟踪最老的年龄。
搜索历史最悠久的，然后做什么 我们需要做的最古老的？
>> 学生：返回它。
打印出来，对不起。
>> JASON HIRSCHHORN：我们走吧。
完全正确。
打印出最古老的。
>> 确定。
马库斯？
>> 学生：跟踪的 作为历史最悠久的您加入他们吗？
>> JASON HIRSCHHORN：OK， 搜索历史最悠久的。
所以我们可以保持最古老的轨道 当我们把它们加起来有。
调用getAge，把返回值在 数组，然后看看这是
目前最古老的一个，也许救 它在一个不同的变量？
这将正常工作。
这实际上可能会节省我们 行，但是这是梦幻般的。
我要离开这个 在这里现在。
但是，如果你想在你的 实施把它那一步
进一步，那将是巨大的。
>> 马库斯？
让我们做getAge在这里。
>> MARCUS：确定。
问一个年​​龄的用户。
>> JASON HIRSCHHORN：问 用户一个年龄。
确定。
可大家都看到了吗？
在这里？
好吧，询问用户一个年龄。
坚持下去，你得到这个。
>> MARCUS：我想我真的不知道为什么 最好是返回一个int比星
只是一个int，然后像只 返回年龄来存储它。
>> JASON HIRSCHHORN：这不一定 不如归去。
它会很好的工作回国， 但我希望你为返回int明星。
>> MARCUS：确定。
我真的不知道是什么 -
>> JASON HIRSCHHORN：确定。
没有任何人有任何想法？
我们要求用户一个年龄。
我们得到一个整数。
>> 确定。
那么，为什么不我们在这里暂停一下。
我们打​​算去我们的下一个步骤 逻辑，映射这些东西，看看，
然后你们将代码首先 部分，以及代码了这一切
在一起，但一个特定的getAge。
我们会弄清楚这是怎么回事 在与该整数明星。
>> 但在此之前，我们这样做，我们才跳 成C代码，可以有人指出
有些事情，他们在我们的伪代码见 这将映射到正规的代码？
在C？
所以有些事情在伪代码，有些话 你看，有的缩进你
看，一些事情，给你一些 有关如何在C代码这个提示？
>> 学生：For循环。
>> JASON HIRSCHHORN：在哪里？
>> 学生：对于“每一个”海豚“
>> JASON HIRSCHHORN：确定。
我们走吧。
我们已经有了一个循环那里。
还有什么？
盟？
>> 学生：为int的字符串 事情将是一个为i
>> JASON HIRSCHHORN：确定。
因此，我们在前面提到过的功能。
我们看到其他的东西？
>> 学生：printf的。
>> JASON HIRSCHHORN：没错。
不是很明显，但我希望我们有 现在有些熟悉的printf。
还有什么？
是吗？
>> 学生：读一个数组是 只是声明了一个数组？
>> JASON HIRSCHHORN：确定。
大小arg的话，。
这是正确的。
我不知道写的是​​什么 为，但肯定的，宣告之一。
另一个词来创建它。
我们看到了这里的任何其他的东西？
结构我们知道吗？
什么是线“的搜索 为最古老的？“什么样的
结构可能使用？
奥尔登，你建议。
>> 学生：只要搜索。
所以像只是一个循环。
>> JASON HIRSCHHORN：一个循环。
所以，他们的搜索。
你可能谈论线性 搜索就在这里，所以它可能
只需使用一个标准的循环经历 一切，这就是为什么
柯蒂斯认为，我们可以把 它在先前的循环。
>> 我们看不到任何其他的东西？
检查参数的个数数。
我们如何检查什么吗？
>> 学生：如果报表。
和
>> JASON HIRSCHHORN：这是 一个if条件。
>> 那么，你为什么不上手 该编码方案。
你有伪代码在这里。
开始写在C代码。
再次，我们要弄清楚什么是 与整型明星和事
我们如何能真正编写这个程序 所以，它符合
规格我给你。
如果你想，但是，启动 只有整型得到无效。
它只是返回一个整数。
>> 这有助于你走了。
只是代码的。
代码它只是返回类型 作为一个int，而不是作为一个int明星。
但是，我们打算把它变成 整型明星再次使我们能够顺应
该规范。
也探讨如何访问一个实际 得到什么杰夫
说起早期。
因此，需要三到五分钟 编写这一点。
>> 我们将通过 这个代码放在一起。
如果有缺少我道歉 澄清这种某些部分。
但我们要看看什么权利 现在的问题是我已经打完了所有的
它是什么样子的代码 如果我们只是返回一个
整数与getAge。
我们将通过该代码，并 然后我们会找出我们如何能
真正得到它，以配合什么 要求我们要返回一个int明星。
>> 下面的代码。
再次，我向你道歉，我们不能 编写了这一点作为一个群体，但我想
以确保我们通过它。
>> 对于顶级的，我们有我们的函数 原型，getAge。
之前我们已经看到了。
返回类型，然后再 名称，然后参数。
>> 在这里，我们包括 三个库。
有人可以告诉我是什么 这一行12呢？
夏普包括标准live.h？
这是什么线路呢？
如果我要问你这个上了白卷，并 我问你给我的答案
两句话，你会说什么？
>> 学生：[听不清]
允许你使用所有的功能 存储在该文件中。
>> JASON HIRSCHHORN：这是 一个很好的答案。
这是header函数具有 的多个函数原型
如果你要使用那些在 您的图书馆，这是说这些
功能存在。
我需要什么别的事情可做，如果我 包括，比方说，CS50库？
我需要什么别的事情可做的时候 我编译我的程序？
>> 学生：[听不清]包括： 使用它的破折号升。
因此，我们需要在那些CS50库链接 与破折号升站立链接。
在实际的那些破折号升CS50链接和 零，实际执行
的，也就是说，得到的字符串或得到诠释。
>> 所以后来我们在主。
确保用户输入一个且只有 一个命令行参数。
就像我们的伪代码，我们有 如果这里调理了。
我们希望，你们是很熟悉 用这条线，并能​​够
写这段代码很快， 检查的argc。
>> 接下来，我们正在做一个给我行。
同样，你以前见过的。
这是将字符串转换 为整数。
>> 接下来的事情我做的是我 另外，如果条件。
我确保他们进入了一个积极的 每海豚的数量
规范，检查是否 海豚是小于1。
所以，再一次的第一部分 代码，这三样东西 -
检查args来数，n，如果 它是大于零 -
你写的代码很多， 验证用户输入。
你应该很熟悉 编写该代码，并能够
很快写。
>> 下一步，我们初始化一个新数组。
什么类型的东西都是我们 把这个数组？
每一次这样的整数 三个字符。
>> 接下来，我们得到的年龄，和一个正常的 用于遍历数组迭代，
我们正在调用这个函数getAge， 存储的返回值
getAge阵列中。
同样，你写的代码一样 这个有很多之前了。
有一件事，希望你会搜集 从去通过你的过去
这个测验的问题是，很多 你将成为怎样继续做
有些事情你已经做了。
这是非常重要的，看看那些 模式，让你不会
使您的工作在超硬你 未来通过思考我从来没有做过
这之前。
你以前做过的所有的这些东西。
>> 接下来，我们的代码最终行。
我们跟踪的最古老的时代， 经过各年龄，就像你
建议，奥尔登。
如果目前的事儿岁 我们正在通过迭代较大
比我们保存的最古老的号码， 我们更新了最古老的数目。
>> 终于在年底，我们打印 出的最古老的数目。
同样，你这样做之前。
你实际写入线性搜索。
你需要写一个。
这是一个有点不同。
你正在寻找一个具体的数字， 不是最大的，但
你以前写了这个代码。
>> 最后，在诠释getAge， 你以前见过这个。
我们有一个do-whil​​e循环问 用于用户输入，直到它
满足一定的条件。
最后，我们只是返回 该整数。
>> 因此，所有这些代码你已经看到 之前和之前写的。
这里没有什么是新的。
当然，我介绍它在一个 不同的方式，我也许太
我的方向混乱， 但你以前见过这个。
这个逻辑你是有能力的100％。
如果我们运行这个程序 真的很快 -
我已经做到了，所以 我们将运行。/教练机。
>> 发生了什么事？
>> 学生：[听不清]。
>> JASON HIRSCHHORN：我没有 给任何参数。
让我们培养5海豚。
那将是二，三， 四，五岁。
正如你可以看到在这里，它 打印出的最古老的时代。
因此，让我们重新回到gedit的。
>> 不过，当然，这不是什么 规范是要求。
这是问的原型。
没有回报的整数，但 回报在整数明星。
所以，如果我要去那里改变它 在原型我更好
在这里改变它。
>> 现在让我们通过工作 这，就在这里。
让我们从最底层做起。
年龄不是一个int明星。
年龄是可变的是什么类型的？
>> 学生：一个整数。
>> JASON HIRSCHHORN：所以线63，年龄 不应该是一个整数。
它应该是一个int明星。
我如何让它一个int明星？
>> 学生：[听不清]。
>> JASON HIRSCHHORN：把一个明星在那里。
现在让我们来看看这儿吧。
67，调用getInt返回一个整数，而我们 存储在年龄该整数。
但是，如果我们对待年龄为 现在指针，我们怎么需要
更新此行？
>> 学生：把一个明星。
>> JASON HIRSCHHORN：将 岁前的明星。
那是你说什么？
>> 学生：是啊。
>> JASON HIRSCHHORN：对。
因为调用getInt返回一个整数。
我们想去给位置 我们的年龄，把一个整数那里。
如果我们做这行代码，我们会去 回到了柯蒂斯在谈论
早些时候，节约的时代，一些疯狂 整数，也许整数5。
最后，我们尝试去位置5 在内存中，而我们在很多得到
该烦恼。
>> 因此，我们需要一个明星 还有，和第69行？
同样，年龄，它在内存中 就在这里解决。
那么，我们如何需要更新这一行？
别人？
我们如何需要更新这一行？
>> 学生：将一个星号出现。
>> JASON HIRSCHHORN：完全正确。
添加一个小星星就在那里。
现在，我们正在提出的价值 由年龄而不是年龄。
>> 所以，再一次，我们看到这个代码去 从整数到终点。
非常相似。
我们需要寻找那些地方我们 有年龄，我们需要改变他们
一点点，因为我们不希望 变革时代的盒子这么多，什么年龄
是指向。
>> 和返回的年龄，是正确的？
这是正确的，因为 年龄是一个int指针。
是啊，问题吗？
>> 学生：我们可以将它诠释年龄 贯穿始终，并在​​最后时刻，把
在时代前面的符号？
>> JASON HIRSCHHORN：与 返回它的地址？
这是一个非常好的问题。
你可以做到这一点，但让我们来 在第二和答案
问题在第二。
奇妙的问题。
>> 在这里，如果我们打开一个int 指针，什么类型的东西是
海豚的年龄存储在里面？
如果我们返回一个int指针向右 在这里，什么类型的东西
海豚的年龄存储在里面？
整型指针，所以第37行 应该是int明星。
这就是这个数组的类型。
这不是存储整数了。
它的存储整型指针。
>> 终于到这里，海豚的年龄 支架我，那将会给我们，
再次，和整型指针。
我们不希望一个int指针。
我们想要的值指出 由该整数。
于是哈桑，我们如何能够 改变这一行？
>> 学生：把一个明星？
>> JASON HIRSCHHORN：完全正确， 把一个明星在那里。
这会给我们一个值。
怎么样线51？
>> 学生：另一个明星。
>> JASON HIRSCHHORN：另一个明星。
这是完全正确的。
所以，我们正在处理，现在再次，这些 事情如int的指针。
>> 学生：是不是在所有问题，在 getAge，诠释星级年龄从来没有放弃
E位置？
>> 杰森HIRSCHHORN：这是一个问题，即 整型明星的年龄永远不会给出一个
位置，这将是一个类似 问题你是什么
与刚刚回国说起 符号的年龄和
保持它作为一个int。
但我想先运行此代码 看看会发生什么。
>> 确定。
所以变量年龄UNITIALIZED 这里使用的时候。
所以说，“初始化变量 “年龄”来关闭此警告，“它
建议给它空。
让我们给它空。
因此，我们应该摆脱THA警告。
我们应该能够编译。
>> 多大年纪是海豚？
比方说，1。
赛格故障。
>> 所以，我会去通过GDB现在，我 鼓励你去通过GDB上
你自己去弄清楚为什么这 程序只是赛格故障。
我不会离开这个作为 悬念，虽然和我要去
打开这个功能。
我们要去理解为什么 这个程序段故障。
所以，大家都在栈上，当 函数被调用时，一个托盘被添加到
众所周知栈，本地 变量被存储。
当函数返回时， 该纸盘消失。
这些局部变量走开为好。
>> 诠释星级年龄等于null是一个本地 变量保存在堆栈帧。
当此功能消失，这 变量消失为好。
所以，我们通过对地址 的一切。
我们通过对年龄。
这是一个地址，我们通过上。
但最终，我们 -
>> 对不起，我自己走在前面。
为什么这个节目真的赛格故障的 这种情况下是因为年龄为指向
为空值，它是一个特定的位置， 和null是你不是一个位置
不准碰。
所以，当我们试着写这行 的代码，将年龄和做
那里的东西，我们就麻烦了， 而这也正是我们赛格故障。
因为明星的年龄，年龄再 是指为null。
我们希望为空，这是一个坏的区域。
我们试图调用getInt有，1在我们的情况下， 而这也正是我们赛格故障。
>> 但是说一个选择的情况下，说我们 给了这个合法地址
就在这里，就像bf4ac，东西 我们之前看到的。
即便如此，当这个程序返回， 我们会碰到一个问题，因为
该地址就会消失。
局部变量的地址 会消失。
不管年龄是指出不会 已经存在了。
>> 我们修复的方法是 你见过的东西
之前，malloc函数。
你已经被引入到 该malloc函数之前。
你见过吗？
malloc的给你一些内存 不会消失的时候
堆栈帧消失。
所以写这行代码 -
我想给 它给你的现在 -
malloc的。
而且，由于我们要存储一个int，我们 打算将malloc足够的空间。
我们要去说放弃 我一箱大小为int。
malloc的返回地址，我们 节能年龄的地址。
>> 现在，当我们运行这个程序 -
我们不会向赛格错，因为 记忆体区块，我们通过了
malloc的不消失时， 堆栈帧中消失。
他们住，直到我们想 要摆脱他们。
>> 而这又回到你的问题， 杰夫，从早期。
我如何创建的东西在我的 我想以后使用的功能
在主要的或不同的功能？
我使用malloc，和我通过 围绕他们的地址。
>> 这是一个很大，无可否认， 覆盖刚才。
所以，请，如果您有任何 的问题，问了。
>> 学生：所以的malloc不上 堆栈了，然后呢？
>> JASON HIRSCHHORN：这是 完全正确。
盒子的malloc是给你 是不是在堆栈中。
它把它给你在这个部分的其他 内存，并且我们要
谈谈在讲座上周三。
这个名字是堆，但我不希望 要过多谈论它比其他
那就是没有得到这个其他地方 当函数消失删除。
>> 还有没有其他问题？
>> 学生：我想如果你没有使用 单独的函数，你把所有这一切
代码放到主，你仍然会 需要使用malloc？
>> JASON HIRSCHHORN：大问题。
这可能不是最有效的 写这个程序的方式。
你可以很容易地做到了这一点的do-whil​​e 圈主并保存
自己一大堆的麻烦。
为什么我想要做这样的原因 这是因为我想大家
可以看到在主， 我们可以创建一个数组
指针，INT指针。
我们可以初始化这些指针 别的地方，把他们在这个其他
内存区域停留，只要 我们希望它留下来，然后我们就可以
后来访问它们。
>> 例如，我们在这里搜索 通过他们。
我们可以做其他 活动它们。
我们也可以得到他们 发现的平均值。
我们可以做很多事情。
问题的关键是，你可以跟踪 有些事情在通过主
一个数组，创建某处那些事 别的，然后仍然使用
他们稍后。
>> 而这种想法，我们现在正在做什么， 要来了很多在未来
P-集合，你要解决的问题。
这就是为什么我们做了这样的连 但无可否认它是一个费解
在此上下文中位。
>> 学生：[听不清]
如果你可以把所有的整型年龄为 相对于指针的实际值，
可能你现在使用的符号的年龄？
>> JASON HIRSCHHORN：对不起？
>> 学生：如果你拿出星星 所有的年龄了，只是没有回报
符号的年龄，到了最后， 将这项工作？
>> JASON HIRSCHHORN：所以的malloc 返回地址。
>> 学生：行吧。
>> JASON HIRSCHHORN：它返回一个地址， 这样的年龄必须是一个整数
指针，因为它要 被存储在一个地址。
>> 我们还剩下六分钟。
我将跳过说话 有关堆栈现在。
我要进入​​3分钟 简要地对SPL，最重要的
事情我认为你需要 知道问题集。
>> 然而，在我来到这里，因为这 就是我们要完成的，
最后两个提醒。
其中，无可否认，我们透过事物去 很快在这一节。
我该道歉的步伐。
如果您有任何问题， 这是我们走过去，为什么东西
工作方式也如此，还是我的东西 不解释的清楚，因为我可以
有，请拍我的电子邮件或谈话 我下课后，我会很高兴
解释给你更深入。
所以，请伸出手，如果 您有任何疑问。
>> 再次，反馈网站也是如此。
花一些时间下课，如果你有 它给我一些反馈。
我明白了很多。
正如你看到的在类的开头， 我通过他们读，作出回应
如果你想有一个回应，我 你认为这个心脏。
这意味着很多给我。
>> 让我们通过谈论下课 你要去图书馆
要使用这个星期。
你可能见过这样的代码就是我 之前在屏幕上，GRect
桨等于newGRect，（X， Y，宽，高）。
你们有可能通过读 通过规范感到相当
熟悉这一点，但对于那些 谁是不太舒服，因为你
家伙，好了，我想重新过这 行，看看它是如何相似，
我们以前曾经使用过。
>> 就像任何变量 -
这是一个对象，但就像对待 任何变量，我们有第一型
最重要的是在这里，GRect。
>> 接下来我们的对象的名称，并 最后我们有功能
初始化它，给我们 我们想要的桨。
有时候我们写整数x等于5，而 我们直接初始化的东西。
有时候我们写字符串 名称等于得到的字符串。
我们用一个函数来得到的东西， 我们采取它的返回值，并
这是我们的新的价值。
>> 因此，我们已经看到过这样的想法，其中 ，可能会或可能不需要的功能
输入实际创建的东西 对我们来说，而不是
我们直接创建它。
所以，我们以前见过这种代码。
我们希望，这个想法的对象，或 至少创建一个对象，是不是
压倒性的，如果你能概念化 它只是非常类似的东西
我们以前见过。
>> 然而，关于对象的很酷的事情 从变量不同的是，我们
可以做的事情与他们。
你不能改变的颜色 变量，但你的确可以改变
一个对象的颜色，或至少 在SPL中您可以更改
颜色你的对象。
>> 在不能移动的变量 一个窗口，但可以移动
一个对象中的一个窗口。
你可以得到一个对象的位置。
你不能真正得到 变量的位置。
这是对很酷的事情 在这个库中的对象。
>> 然而，这些功能都可以 那种被混淆。
我们还没有真正使用的功能或 对象之前，所以我觉得这是
有助于了解一个通用的方法 明示或做事情的对象，或
理解对象。
正如你会发现，我有两个 这里写的函数，函数
你见过前 - 添加，窗口 逗号桨，并设置颜色
桨逗号黑色。
在这两种情况下，我们有一个函数 有两个参数，并
做一些事情。
>> 现在，更一般地，所有这些 你要编写一个函数
要处理的对象 采取地方和什么。
A其中是您想要的对象 做一些事来，在这
情况下，一个窗口或面板。
而什么是你想要的 要做到这一点，或给它。
>> 当你设置颜色 什么，在哪里
您设置的颜色？
随着桨对象。
和你设置什么颜色的？
黑色。
与add函数，其中 你在做什么吗？
与窗口对象。
什么是你给了吗？
你给它的桨。
>> 你会发现，你的功能 使用时，设置颜色，设置位置等
等等，等等，所有 遵循这个模式。
他们把你想要做的事 东西，该对象想要
做的东西，你想什么 用它做什么，或者你想有什么
改变，或者你想有什么 加入，或者在特定的颜色
你希望它是。
或者，如果它不填，你要 使其填充，等等，等等。
>> 诚然，一个非常简短的讨论 斯坦福 -
是什么呢？
斯坦福大学编程库？
便携图书馆，这是正确的！
谢谢类。
斯坦福便携式图书馆。
但同样，很多更多的信息 在问题设置规范给定的，但
希望这使得它一点点 更易于理解对象，
尤其是当他们已经​​与 我们已经看到和以前做过的事情。
>> 所以用一点，那就是本周四。
享受学习 堆的明天。
好运气在下周您的测验，但 当然，我会在那之前看到的，
希望在节下周二。
但也如果你有任何问题， 意见，疑问，请随时
伸手。
下了课，我就到外面，如果 你想谈谈你的问题
设置或有一些问题。