教授:那么对于日程 这个星期,没有那么多的东西。 但希望非常,非常有帮助 而相关的你们这个星期。 但是,我们要花费可能15, 20分钟只是快速地说话 有关链接列表。 链接列表要 被覆盖在测验。 因此,或许这将是非常有益 学习一些关于那是什么。 我们将花费巨大的 当今的大多数节 去在测验零的实践问题。 然后,我们可以节省大概有20,30分 在结束对所存疑问 任何人有。 然后,最后 五分钟,我要去 给泵了讲话测验。 你们都希望在这里呆了。 因为这将是一个好时机。 好吧,所以一些 材料上的链接列表。 他们是如何结构通常是 你有什么所谓的节点,对不对? 你有这些东西叫做 节点,这是结构。 我去了如何创建 在下一幻灯片的节点。 但是基本上所有链接 列出的是数据 通过指针已经被串在一起。 而这样做的好处,我们有 使用链表以上的, 或许,像阵列,是 一个事实,即在一个阵列 你需要一个连续的块 内存都在同一个地方,人们 又一个,以便能够有。 而一个链表,你可以 有记忆的随机小位 在你的电脑 通过指针串成。 而这样你 可以访问信息 附带一前一后 其他,后等 而不需要的只是一大块 内存在计算机中的某个地方。 所以这是一个主要的 原因我们使用链接列表。 其次,它很容易动态 调整,因为在数组中的链接列表, 当你声明一个数组, 你有某一设定值。 比方说,我想创建 10整数数组。 我创建了10个阵列 整数,仅此而已。 这是10。 我不知道以后的事。 如果我想让它11,不能做到这一点。 如果我想使它9,不能做到这一点。 而在链接列表,你可以添加和 删除和插入任何你想要的。 您可以动态地调整你的 构建这里,你的数据结构。 这给了我们很多 更增加了灵活性 我们通常不 有数组。 任何人混淆就基本 如何链接列表结构 为什么我们要使用一个以上的阵列? 是啊,我们就去了详细 如何真正创建一个。 但是,这只是一种 一般意义上的现在。 凉。 所以阵列串成 这些可爱的小东西 所谓的节点。 所有节点的是一种结构的。 请记住,一个结构是,如果你想 创造了一定类型的变量 在C,它已经不 存在,你作为一个程序员, 实际上可以创建自己。 因此这种类型的数据 结构被称为一个节点, 实际上已经由我们创造,即 C内自身不存在。 和使用的方式 创建一个是你有没有 typedef结构的头部, 它告诉编译器,我 要创建一个结构。 我们将其命名为“节点”。 而且里面我们要 在声明一个变量, 这是要存储的值。 然后,我们也将 有人称指针“下一步” 指向下一 节点在链接列表。 然后你完成该关 通过只需再次重复节点, 编译器知道,OK 这是我的结构的结束。 所以在这种方式,我们是一起 创建一个可爱的小阵列 之类的话了 值和一个指针。 你可以将它们链接全部 连同那些指针。 使他们能够都挺会 串成链中。 凉。 你能听到好一点? 听众:是的。 教授:好的。 因此,作为你们可以看到的样子, 一个典型的链表的结构 是你有一个头。 你有头值不 被指向任何其他指针。 但它会指向, 或参考,另一个节点。 该节点之后将要引用 在那之后,等等,等等节点 直到你最终打 您的链接列表的末尾。 而你是不会有一个指针在那里。 因此,认为像,在项链上,甚至 如果你们做球员,我不知道, 喜欢用水果循环 当你还小。 你愿意把它们串起来 并且穿起来挂在脖子上。 认为这是同样的事情。 你有这些小东西,你 可以串在一起的点一 之后,以一前一后 它,等等,等等 直到你有一个链 的数据结构的 你可以使用你喜欢的。 因此,办法,这我们会 通常插入或删除 从链路的任何节点 列表非常不同 根据所在的节点。 因此,例如,因为 指针总是 指向一个特定的值, 当您删除或插入一个节点, 你想确保该指针 在所有指向正确的事情。 所以,如果你想有可能插入 与一个的值的新的节点 排序的内部链接 列表中,大家都知道在这里 从图片中,那将 去头和两者之间的,对不对? 因为一个适合那里。 但以何种方式,我们会做的 是第一个取消引用指针 从头部和发送那一个。 但是,我们进入了一个问题在这里。 任何人都可以看看是什么问题 就是如果我们先提领 从头部指针吗? 有什么问题可以再碰上,如果我们试图 把它添加到我们的数组的前面? 听众:[听不清] 教授:没错。 所以在这里,我们有一个指针,是 一旦从头部指向两种。 但是,如果你摆脱了 指针,你点它一个, 我们现在不知道 去哪里找到两个。 因为正如我之前说的,你已经有了一个 内存在计算机中巨块。 所有这些节点可以 随机穿插 在计算机上的任何地方。 而你不知道如何 去寻找的。 所以,你需要有指针 指着在结束所有节点。 否则,如果你不小心 提领1 不先分配 价值第一,你 只是要输 一切之后。 所以,我们要什么 做的是,你首先 要在创建一个指针 节点要插入。 它指向您 想将它插入到, 然后事后你 能回点的头一个。 这是否有意义给大家吗? 大。 把它看成就像一个链条。 如果添加链, 它是一种直观 你如何去插入的。 好了,这实际上是多 更短的比我想象的还要好, 在链接列出了五分钟的高谈阔论。 只是让你们有 那是基本的想法。 下面我们就针对测验零议程。 不要让这种恐吓你。 我知道这是一个很大的信息。 它看起来很吓人。 这也是一个很大的,我 认为,CSC一种术语。 事情是十六进制字符串, 指针,动态内存分配 是非常可怕的冠冕堂皇的条款。 但是,我们要打破他们 下来,做一些练习题 所以,你们所有 准备这个考试。 怎么你们许多有 已经开始学习? 好了,你们可能想 开始入门 上,因为测验是明天。 或者周四一些你。 是啊,所以我们要去 对一些实际问题。 如果你们都希望拿 出一张纸,一支铅笔。 我们将只花了 今天的第绝大多数 在看一些的,这么你们有 以期望在测验什么的想法。 好。 一对夫妇后勤 详细信息以及,任何人 谁没有去过那个环节出现,如果 你去cs50.yale.edu,前面 这个页面有一个链接 上面写着“关于测验零。” 链接需要你。 如果你还没有看过,请阅读。 因为它告诉你真的很重要 有关测验的信息。 我要拔了这一点,从 只是因为,身体, 如果你们不知道在哪里 走,我们都会有问题。 所以,如果你在一个方面最后 以N,去法学院礼堂。 如果你的最后一个开始以P 到Z,去戴维斯礼堂。 而这仅适用于 人们在周三部分。 如果你正在服用的测验 周四,你去SSS 114 在您的演讲通常是。 听众:[听不清] 教授:o到Z,你会 前往戴维斯礼堂。 我要改变这种状况,对吧? 哦,对了,你刚才自动失效。 噢,那是你克里斯塔。 是啊,是我不好。 是的,哦到Z,你会 前往戴维斯Auditorim。 我要解决这个问题,一旦我上传。 是啊。 然后也未尝 重要的是心态 是那个星期三,如果你是正式 就读于周三部分, 你必须把你的测验上周三。 如果你参加了周四, 你必须把你的测验周四。 而且它是在上课时间。 其中,我觉得它就像1:00到 2:15周三和下午2:30至3:45 在星期四。 如果你有一个不可调和的矛盾, 院长的借口是唯一的东西, 不幸的是,我们可以采取。 因为我们有一个 请求绝大部分 到周三切换至周四。 我们不能兑现,除非 我们有一个院长的请求。 好。 这样我们就得到一个开始前 夫妇的实际问题, 我刚准备走了过来 安迪的帮助提示成功。 你这家伙,当你学习,你真的 想练手工编写代码。 在我第一次 花了CS测验,我没有 手练习写代码 之前,它是非常 令人震惊的是多么困难。 当你们不要进入 打字的一切习惯, 说到很自然的被 能有自动完成 括号和分号那里。 当你写出来 手,有时是 很,很容易忘记一个分号, 或忘记关闭一个支架, 或忘记关闭一个冒号, 或类似的东西。 所以,当你手工编写代码, 这是一个非常不同的感觉。 所以你们这些家伙,当你工作 通过一些实际问题, 那就好,真正实践的今天。 或者明天,我想,如果你 同时在周四的测验。 其次,我们有上次一样, 8年的价值实践 在线测验。 今年的测验可能会 非常,非常相似,所有的人。 他们都非常相似。 有种你进入 问题的类型风格 我们要求,类型 功能,我们将它写的, 等等,等等。 因此,采取这种做法测验, 尤其是在时间上的限制。 75分钟做小测验 没有很多的时间量。 这是很长很长。 所以你们真的想 以确保你们是 在写作的习惯 手工代码快。 因为你不希望第一 时间一看就知道长度的测验 在你的测验。 你们真的要确保 你事先练习。 第四,要查看该 讲座和部分幻灯片。 你不必记住的东西。 其实,每个人都被允许 一张白纸笔记, 正面和背面。 你们可以键入或写。 如果你发现自己需要记忆 任何东西,把它倒在了表。 我向你保证,你不想 被卡在了竞猜的中间 是象,哦,是的,有什么 运行时这种抗之类的。 只要把它记下来,​​把它复制 直接从您的笔记纸。 然后,你可以真正地使用你的 大脑思考的问题 而不必记得事实。 所以,真正的利用 任何利基细节 你认为你需要记住, 扑通下来的审查表。 好了,任何问题后勤 关于测验 在我们开始之前一些 竞猜问题的做法? 是吗? 听众:我还没有机会 看测验[听不清] 但它会是 应用居多, 或者是有也将是, 像,知识的问题? 教授:这是一个很大。 因此,该办法,我 将描述测验 is--我放在一起 一些实际问题 我从所有的测验拉。 但你会看到有两个主要的 类型的问题,我们会问你。 一个是东西非常低的水平的细节。 我们会给你一个小的代码块 并说,有一个错误在这里? 什么会打印出在这里? 什么将这段代码产生,等等。 因此,非常低的水平信息的详细信息。 而在另一面,我们将有很 高层次的知识为基础的问题。 你能解释一下 二进制搜索之间差 和线性搜索? 为什么我们要 使用一个比其他? 也许,什么是GDB? 为什么我们要使用GDB? 更高的层次,更根本的 理解的问题。 所以,你会看到的混合物 他们对你的测验两个。 任何其他操作之前,我们 直奔进去? 好。 听众:还有一个。 教授:哦,多了一个。 抱歉。 听众:是的,它的一切权利。 所以你说75分钟是 过短,像这是不可能 我们将完成? 还是一样,75分钟 正是尽可能多的时间 因为我们需要的,如果我们 适当的准备? 教授:好了,所以 测验是具有挑战性的。 这肯定是具有挑战性的。 你会发现自己在很短的时间。 你可能会打,像10, 要走15分钟,而且是喜欢,狗屎。 我有那么多剩下的工作。 而这完全罚款。 每个人都会有同样的感觉。 只是很清楚 你有多少时间。 所以这就是为什么我告诉你 你们做的练习测验。 因为它确实给人一种很有成就感 什么样的测验将是喜欢。 所以,如果你发现自己被 能够完成的做法 在一个良好的金额测验 时间,你可以自己的步伐好, 那么,你会不会有问题 在周三或周四。 凉。 所以,如果每个人都wants--我想 大多数人都有的纸张 出来了。 我要去基本上只是 给你的样题, 给你们一样,一 几分钟的时间做他们。 而我们就去了作为一个阶级 什么是他们的答案是。 所以这是一个非常典型的 早期的问题,我们会 问你,只是转换 不同的碱基之间的数字。 二进制,因为你们可以 召回,是基地二期。 十进制为基数10,或者我们 作为人类通常解释。 十六进制是基地16,这是零 到九,以及A至F 因此,有四位数字我 要求你们在这里进行转换。 我给你喜欢的,三 四分钟思考如何 我们会去解决这一点。 听众:我们现在可以计算器? 教授:你不会 需要计算器,是的。 我想基本此外,我认为,是 所有你们会被要求做。 而只是让我有种有意​​识 当大家都在做的,抬头, 波,我不知道,微笑, 看起来很高兴,如果你就大功告成了。 是啊。 也许两分钟。 好吧,让我们把它研究。 我特意去 给你们的时间更少 比你可能需要 做的一些问题, 只是因为我想确保 我们经历了一堆问题得到。 因此,没有,如果你没有后顾之忧 有机会完成。 只要你有完全确定 如何去了解这一点的想法。 因此,让我们继续前进,做第一个。 因此,首先,有没有人想告诉我 二进制,什么做所有这些数字 代表他们的价值观方面? 是吗? 听众:两到 功率零,二至之一。 教授:没错。 所以。 对,所以一般 当我们以10 所有这些代表都一样, 10到零的基础上,对不对? 那是你一个人的地方。 所有的10的地方是 10之一的功率。 你100的地方是10 于两个的功率。 无论基地你在会 做同样的事情, 只是用不同的基地。 所以二进制,所有这些都是为基地二期。 你要转换所有 数字分为二的任何权力 那数字。 因此在这个意义上说,我们 可以有一个更简单的方法 是能够加起来或 总结所有号码,以便 转换成基10。 因此,没有人想告诉我是什么 回答第一个是在基地10? 听众:二,[听不清] 教授:是的。 听众:42。 教授:42,你去那里。 因此,我们得到这个答案的方法是通过 在做两首,这是两个。 加上两个第三,这是8。 加上两个第五,这 是无论是遗留下来的。 你总结起来,它是42。 有没有人困惑于我们如何得到呢? 所以基本此外,像 我说,你应该确定。 如果不是,那么,我们可以实践这一点。 但是,这一切的权利。 凉。 没有人想给我 回答第二个呢? 50? 好。 任何人都困惑于如何 我们得到了要么? 酷,我将有 答案下一张幻灯片。 如果让您无后顾之忧 需要复制下来。 好了,十六进制是一个有点棘手。 但我要告诉你的家伙 对于如何做到这一点的快捷方式。 所以十六进制,你 记住,所有这是是16。 因为我们作为人类实际上并不 有16个数字来表示, 我们从0到9,而我们的第一个 10的值,然后我们做A到F, 这是接下来的六个值。 这样一来,最简单的方法从根本 任何二进制数为十六进制 就是将它们分开成两部分。 所以任何二进制数,我们会给 你可能会有八位数字。 你可以只破 它们在中间。 所以第埃德蒙顿的一个, 一一,一,一,一一。 有种想起来,你知道,画 斜线或它们之间的逗号。 而且你可以只是转换 直接无论 这是与第一 十六进制数, 而无论这里是 十六进制的第二位。 因此,从通用符号记住, 做十六进制值开始是什么呢? 听众:零。 教授:0X。 因此,我们知道,任何时候,我们问你 到任意数量转换为十六进制, 或任何时候,你看不到任何 数以0x开始, 你知道,这是一个十六进制值。 然后,你将被要求 确定这两个数字是。 而你做的方式,总结出 一半和清点了一半。 所以在这个例子中,什么 将一,一,一,一会? 什么样的价值会是这样? 这会是女,对不对? 这会是15。 因此,这将是F.一, 一,一,人在这里也 F.所以一,一,一,一,一,一,一, 之一,十六进制,全部是为0xFF。 因为这一半代表 女,15的值, 而这一半代表 F时,值15。 因为记得,我们是 计数从0到9。 A像10,B为11一样,F为15。 这是否有道理给大家如何 从我们得到的二进制十六进制? 听众:所以我们是怎么得到 15从一,一,一,一? 教授:是的,这是二进制的,对不对? 想象一下,这仅仅是一个二进制数。 所以,你有两个到 零,这是其中之一。 听众:哦,好。 所以,你只要合计不出来。 教授:是的,然后 你刚才合计了这一点。 这就是它。 听众:OK。 教授:OK。 听众:所以,如果你的二进制去 为十进制数为十六进制? 教授:这就是 最简单的方法,这样做,是的。 你不会为十进制因为 十进制数只有0到9。 我们只是种 这个分裂成两个。 听众:[听不清] 使用十进制找 它匹配到十六进制什么。 教授:我的意思是,你是 总结出利用基本的数学。 听众:是的。 教授:是啊,漂亮多了。 这是一个有点混乱。 但是,仅仅知道你 可以瓜分什么 这个值是逼到一半。 你看,这是什么二进制? 什么号码是什么? 这将是 事情从零到F. 这里也将是 事情从零到F. 然后你可以把 这两个在那里。 听众:OK。 教授:是的。 好。 所以你们要 尝试下一个呢? 零,一,零壹, 1,零,一零。 我给你们喜欢30秒 因为你可能不知道 招要怎么做这点。 好了,任何人都希望得到这一个镜头? 5AH即可。 教授:5AH即可。 5A。 好。 因此,这在这里将be--你想 告诉我们你是怎么得到的? 首先,你怎么五个? 听众:因为零, 1,零个,一个是五。 教授:大家是否明白 为什么零,一,零个,一个是5? 你有一个在这里。 你有没有在两到第一。 在二至第二,则 有一个,其为四。 所以你加四加 一,您有五个。 每个人都好? 好。 然后,这是什么,为什么? 什么号码做了对应? 听众:10。 教授:而在基地二期这是什么? 听众:[听不清] 教授:没错。 所以在这里第二个值是5AH即可。 大家好如何转换? 这是一个简单了很多比你认为它是。 我只是想确认 你知道有用的技巧 和技巧如何做到这一点。 听众:为什么你只拆分 它在这样的中间? 只要是这样,好吧,我只打算 关心这些第一[听不清]? 教授:因为这是真正的 这样的十六进制值表示。 0X,这实际上意味着 没有什么比告诉你其他 这是一个十六进制数。 这始终代表 前四位数字。 这始终代表 最后四位数字。 所以,这两个数字只是 对应于不同比特。 听众:所以我们会always-- 教授:你总是 要达到8位值。 听众:是,仅仅喜欢的事情 这里还是一个东西全? 教授:这只是一个 在电脑的东西,是的。 听众:OK。 真棒。 教授:另外,因此在此示例 我们从二进制转换为十进制, 从二进制为十六进制。 你们想确保你也 练习周围走另一条路。 所以,如果我给你0xFF时,你可以 得出了二进制,对吧? 您将˚F成二进制, 这是一,一,一,一, 转换F到二进制,这 是一,一,一,一。 因此,我们可能会要求你做 另一种方式。 因此,小数为二进制,或者 十六进制到二进制文件。 所以,你想 一定要知道两者兼得。 我们可能会问你一个 两者的结合。 是啊,你有问题吗? 我可以see--你是好? 听众:是的。 教授:OK。 我是好抹掉呢? 大。 好吧,那么答案在这里,如果有人 奇怪的是后来上感到困惑。 好。 听众:它的问题,如果我们把 我们在国会大厦或小写字母? 教授:它确实是因为 十六进制,按照惯例, 所有字符都大写。 因此,A到F的 将是大写的。 如果你把一个小写一个,我不知道 如果我们必然会将其标记为错误的。 但理论上, 这不是技术上 如何你应该有它。 因此,他们都应该是大写的。 是啊,好问题。 好。 第二个问题。 这里要考虑这个可爱的计划。 我要问的问题, 我会回来这一点。 所以,第一,什么是标准的内 io.h这是感兴趣的项目? 其次,什么是无效 表示在三线? 第三,什么是无法返回零 主,如六号线,一般意味着什么? 如果你们想写那些 下来,因为我要切换回 以幻灯片只是让你可以看到代码。 这是一样,也许是一个例子 更高层次的问题,我们要求你 意味着一个节目是什么东西。 每个人都对我好到 回到幻灯片? 嗯不错。 所以,我给你们喜欢也许三 几分钟来看看这一个真正的快。 OK,所以这一块的像 相当容易,在概念上。 没有人想告诉我什么是 首先通过内部哈希包括 我们的标准io.h库文件? 我们为什么需要该库 包括为这个计划? 这里是什么我们需要它? 是吗? 听众:就是当 你把printf的? 教授:没错。 所以printf的,任何时候你 取来自用户的输入 和打印的东西 到屏幕上,这是 标准输入,输出库。 你可以把它的方式 - 输入,输出。 我有一个输出? 是的,我愿意。 所以,我知道,我总是会 需要标准化i.o库。 所以printf的是功能 由此我们需要访问 和包括hashtag包括 标准i.o库。 好。 其次,它是什么无效意味着什么? 我们有INT主要(无效),哪些呢 在这里作废这里的意思三线? 是啊,在后面。 听众:[听不清] 教授:没错。 所以请记住,我们已经学会了 首先是我们的PSET 实际上你可以 指定命令行 论据,你的程序,你 主要功能,需要为你的用户, 叫它。 如果我们有空隙,这意味着你 可以只直接运行程序 不带任何命令行参数。 每个人都清楚这一点? 好。 而最后为什么我们懒得做 这回零事儿吗? 为什么我们甚至有一个int主? 为什么我们不能只是有无效的主要无效? 是吗? 听众:为了让我们能 可以肯定的是,程序 成功退出,如 相对于它是否被列。 我们都知道,这是 不同类型的错误。 教授:是的,没错。 这仅仅是一个很 常规的事情,我们做的, 是,就在年底 你的程序,只是为了确保 你的主要功能 运行正常, 我们总是希望做回零。 即使我们不一定 没有看到打印的任何地方。 因为作为程序员,你知道的,如果 你有很多不同的代码行 你不知道在哪里 这些都走错了, 如果发生错误的要 请确保你得到这个错误。 所以,通常,如果出现 错了,我们将有一个返回一刚 以确保我们知道它是。 所以,如果你看一回 零,即通常 意味着你的程序是 成功执行。 好? 凉。 好了,下面第二个节目。 考虑这一点。 而且,如果你们看到一个 浮动,你们大概可以 有一个很好的想法是什么 我要问你。 所以,当这个节目 执行,你可以看到, 我声明一个浮点数 在我的主要功能。 我将其命名为“回答,”而且我的设置 通过10,其等于一个分割。 我打印出,一 小数位,即浮动。 然后我回零。 所以在执行程序时, 回想起贪心现在, 该程序将打印0.0。 大家都知道,希望大家都 知道,一除以10不是0.00, 它是0.1。 但是,解释为什么这个方案认为 即1除以10打印0.1其他 超过0.1? 我给你们也许就像30 秒,只是快速地想想 我会回去的计划。 好。 任何人想给它一个镜头? 在三句话以内, 因为通常我们是 要限制所有的答案 以三句话以内 所以你不只是吐出 随机的东西到你的测验。 是的,采取了一枪。 听众:所以我觉得有这 所谓的,喜欢的东西,[听不清] 所以有可能是,例如, 有可能是,象,0.09, 但如你打印第一 位,这将是0.0? 教授:关闭,不完全是。 Christabell? 听众:你把一和 10,他们俩都是整数。 这样一来,方式,它是怎么回事 存储它是为一个整数。 这样一来,最接近的整数将是0.0。 所以这就是0.1。 教授:是的,这是真的很好。 这是正确的答案。 所以这是一个非常混乱 概念很多孩子。 我真的想确保 这是在每个人的头上加强。 因此,我们所说的浮动 点不精确, 其中的原因有很多 在贪婪的程序 没有工作,最初是因为 你忘了投你的变数。 那么,什么Christabell说 是完全正确的。 一个浮点本质上是不准确的。 因为在一台电脑,正确的,我们有 的存储器比特的有限数量 我们可以用它来表示数字。 因此,举例来说,此CS50 ID is-- 我认为这是一个64位的计算机。 一个浮点只能代表 由这些比特的有限数量。 所以0.1与无限的零, 这是0.1的,对不对? 但是,我们不能真正存储 这个数字在我们的电脑。 我们只是没有 足够的内存来这样做。 等的最近近似 什么是存储在内存中实际上是 像0.000东西, 什么,什么,什么的。 其中,一旦截断 它,几轮下来到0.0。 所以本实施例只是一个 这说明很多问题 我们每当我们 尝试错误做数学 而无需进行转换为不同的整数。 所以才要警惕这种情况发生的。 在测验,如果我们给你 代码块,它的样子, 什么打印出在结束了吗? 如果它的一些随机值你 你们应该知道为什么会发生的事情。 是吗? 听众:截断是摆脱 某一点后,一切吗? [听不清] 教授:是的,所以实际上 这是一个非常坏的榜样, 因为0.100无论实际 将截断下降到0.1。 但是,如果你要运行它 - 我不知道 还记得,因为去年他们 运行它在不同的程序。 他们跑了一种叫做 在CS50电器,其 是从ID不同。 这是一个32位系统,我想。 因此有不同的号码。 但实际上,只知道 截断的整个概念 它只是如何削减的事情了。 所以,如果它rounds-- 听众:没有四舍五入。 教授:没错。 是啊。 凉。 嗨,在后面。 我们只是在看一些 测验复习题。 好吧。 因此,这里要考虑一个不同的程序。 我想给你们一个 几分钟阅读过这一点。 这是后话,这是一个非常 最近,我想吹了很多你 人的头脑。 但是,我们要谈 通过这又只是 确保你 完全理解它。 好。 好。 任何人都需要更多的时间来 通过这个代码阅读? 好。 因此,在我看来, 该程序中,我 创建两个字符串使用的GetString。 一位名为S和一个叫吨。 如果他们是平等的 等于彼此 它应该打印“你 键入同样的事情。“ 但是elsewise,将打印,“你 输入不同的东西,“对不对? 似乎非常,非常简单。 但是,但是,如果我真的 尝试写这个程序, 看来,即使我 输入完全相同的琴弦, 它仍然打印出来,“你 输入不同的东西!“ 有谁要采取 射击为什么这个程序会 响应该输入 是不同的,甚至 当文字本身是一样的吗? 所以,如果我是input--大卫·爱 用一个例子像妈妈,是吗? 小写M-O-M的S,T 等于小写的M-O-M。 如果说我是跑这 该代码,为什么会 打印出“您输入不同的东西?” 有没有人需要更多的 时间去想呢? 好吧,我想我们是很好的。 是吗? 听众:好了,所以它的东西有关 在那里它存储在内存中,对不对? 教授:是的。 听众:当它像,如果这 字符串s存储在内存spot-- 我发明this--为零。 教授:当然。 听众:和串T 存储在内存现货, 等,167,然后 零不等于167。 教授:没错。 好了,记住这个令人难以置信 启示我们解释你们 过去的这个星期,那 字符串不真的存在吗? 当我们创建一些所谓的 字符串我们,在现实中, 创造一种叫焦明星。 所有这是一个指向 一个字符串或字符数组。 因此在这个例子中,如果我 要输入M-O-M的方式 我的电脑会保存它 内存反斜线零之内,对不对? 这四个字符,字符, 将存储在某个地方。 然后这四个 字符,反斜线零, 存储别的地方,对不对? 我不知道在哪里的地址 是,他们在我的电脑上的某个地方。 但是,我并不确切地知道他们在哪里。 当我创建一个字符串 S,所有这确实是 是一个指针,指向 启动这个字符串。 当我创建这个吨价, 所有这些都是一个指向这里。 所以,当你试图 划上等号,并检查 看是否s是等于 等于T,计算机 实际上只是回归 你这个M的地址 且m的地址。 而且因为他们是两个 独立的部分数据的 存储在两个不同的 在您的计算机的地址, 您的计算机永远不会 识别它们视为相同。 有没有人要 给一个镜头一下我们 必须做的,如果我们想纠正 这一点,有一个正确的正在运行的程序 代替? 想想看,一个几秒钟。 我们究竟需要改变 得到这个程序运作 我们希望它发挥作用的方式吗? 是的,要采取刺伤它? 听众:我们可以尝试取消引用 指针和检查通过阵列? 教授:这是做到这一点的方法之一。 那么,你叫什么名字来着? 对不起,提醒我。 ZEE:ZEE。 教授:是的,有什么Zee的 建议绝对会工作。 对? 我们可以取消引用指针 实际上去访问 这里内部的物理数据。 我们可以只是比较 整个屏幕。 我们可以说,OK,指针, 给我里面有什么在这里。 它会返回一个m。 我想说,指针, 给我里面有什么在这里。 返回一个m。 难道那些比赛? 是。 然后我们继续前进。 我们继续检查整双 字符串一路上扬,直到最后 看看如果这些都是平等的, 如果所有的值是相等的。 如果所有的值相等, 那么我们知道字符串是真实的。 当然,这是我们如何做到这一点? 没有人感到困惑的任何的吗? 如何将字符串的整个概念 其实只是指针, 和他们怎么不真的存在吗? 为什么我们得到的错误 就像我们得到它的方式吗? 因为我保证你们,指针 和字符串分配和内存 要上来了。 是吗? 听众:[听不清]提领 它,你只要把一个明星[听不清] 教授:没错。 因此,要derererence指针方式 去指示器的该地址 将获得的数据时,值那里。 而做到这一点的方法是明星的指针。 不要混淆了。 听众:[听不清]。 教授:是的。 听众:所以,你可以只写 如果明星享有平等平等明星吨。 教授:哦,不。 没有。 听众:这是不够好,对不对? 教授:这不是,因为你 只检查的第一个字母。 你可能会 需要某种循环的那 通过每一个迭代 字符两个字符串。 是啊。 所以,如果你想只检查 如果他们开始使用同样的事情, 如果,明星可以做 s等于星吨。 然后,你知道,至少他们 开始使用相同的字符。 是吗? 听众:这样的方式 你这样做会 像一个嵌入的for循环或指针? 教授:是的。 差不多就只有一个循环。 请记住,大卫在课堂上提到的 免费的语法糖? 而他有这个非常 明星的T令人困惑的事情 加一,其中,将整合 通过它移动指针? 这样做的更简单的方法 这是算了笔的我。 所以它只是一个数组。 你会有一个对的方式 循环从零跑到我,在那里 我是的长度 字符串,你可以只 写的,而不是做 整个指针,引用的事。 所以,这些事情是完全 相当于您的计算机。 你们可能不会 需要知道的是, 但它的好,只是一种 在后面你的头脑。 只要知道电脑 识别代码不同的块 作为同样的事情。 因为这仅仅是更为用户 友好的为我们展示它喜欢它的 阵列。 这只是更容易。 听众:所以使用strlen喜欢,get-- 教授:是的。 听众:OK。 教授:你可以 使用strlen或者,如果你 没有strlen的,你可以做起来 直到你打反斜线零为。 要么会工作。 是啊。 听众:所以这是取消引用每 单个字符,如果我们实际上 编写这些代码,我们 可能只是做T支架我 喜欢跟在它前面的明星? 教授:是的,等于等于小号 支架我,然后继续前进我 下来,直到你打到最后。 啊,这是你会做什么。 我会其实有下一个 实际例子中,我们当 写的strlen所以你们会种 对得到它玩了一下周围。 那么,在刚刚内存大家清楚, 字符串,指针,质量地址? 一些更高层次的概念,你 将肯定需要知道测验 明天。 好吧。 好。 是的。 好了,一件事,我们也会问 你,因为我们每年都会做一个测验,是, 假设你已经忘记了(这 我们似乎忘记每年做) 在头文件strlen的声明。 因此,我们不得不重写它自己。 下面是指南列表 我们可以为您介绍 男人,你去假设 S中的字符串不能为空。 你可以假设旨意是 以反斜线结束零。 所以,你知道那是什么 这将结束与。 及,例如,该 您好长度为五位。 所以,你可以假设,你好 将有5,H-E-L-L-O。 你不必假设 擦屁股零占的长度。 这里这最后一件事,不 担心整数溢出。 曾记否 什么整数溢出是? 听众:超越 的[听不清]的长度。 教授:是的,你能解释一下 了一下,这是什么意思? 听众:所以,我想它可以追溯到 前面的截断的例子。 但是,如果你只有这么多的数字 超越比特数 实际上你可以为它分配 那种它只是切断。 教授:是啊,所以一个典型的 电脑,有多少位我们有吗? 听众:32? 教授:是的,32了吧。 所以这是什么,四 十亿,二十亿? 四十亿,最多四十亿 正整数,对不对? 二十亿负, 的两个十亿积极的, 要看你怎么想这样做。 所以,基本上我们可以有 足够的整数,可以上去 两到第31减1,对吧? 因为一旦我们打了两 第32届,我们不 有那么多的记忆在我们的电脑。 因此,从理论上说,我 可以用一个数字来向上 即,像,二至第46次。 这是一个巨大的屁股数,但 理论上可以。 所以,整数溢出是,如果你尝试 创建一个整数,超出了 您的计算机能够存储。 所以你们的 本实施例不具有 担心我们给你一个巨大的 字符串,它是两到第32个字符 长。 这将是真正的意思。 好吧,所以我只是想给 你们此基础结构。 你要创建一个 所谓函数int strlen的,其中 一通,一个char明星,或字符串, 指向字符串称为第 好吧,每个人都复制下来。 凉。 Oops--其他方式。 因此,这是一种像 这块难问题, 所以我给你们也许五到 六分钟那种头脑风暴 写这个功能了。 听众:我们不 账户[听不清] 我们不必使用整数? 教授:不,你没有。 我给你们一个提示。 while循环可能会非常有用的在这里。 是啊。 这里的 糖果。 糖果也将是可利用 对于测验,我想。 所以,你们将全部 加糖的明天。 可我 - 你得到它。 听众:OK。 教授:是的。 也许30秒钟左右。 好吧,如果你 不这样做,无后顾之忧。 我们将通过移动了一起。 好。 所以我要去刚刚布局 基本结构此功能在这里。 诠释strlen的。 首先,没有人想告诉 我什么INT表示? 我们需要有在此功能。 听众:STRLEN [听不清]。 教授:没错。 因此,在这里无论发生什么事情, 我们需要返回一个整数。 和作为指定 规范,我们要return-- 为它去的家伙,只是继续前进。 都很好。 吃这一切,所以我没有 拿回来,其实。 通过int只是意味着你 将要返回一个整数。 这是什么字符星级S' 这意味着什么? 听众:喜欢,什么是投入研究。 教授:没错。 什么是差不多的 同样的事情为char明星? 听众:字符串? 教授:没错。 因此,所有我们正在做的是给 这是一个指向字符串的指针。 好。 凉。 另外,不要忘了,如果我们忘记了 给你这些支架, 不要忘了给自己写。 因为从理论上讲,你的代码是 如果你忘了把它们写不正确。 只要时刻注意。 象,小东西 你不通知 当你编写你的笔记本电脑, 因为你的笔记本电脑会为你? 不要忘记,当 你写的手。 是吗? 听众:但如何不正确的? 就像,我们得到了整个问题错了吗? 教授:没有,没有。 不要担心。 它实际上是理论上的可能 让你得到一个问题满点 即使你的代码 从未在现实生活中运行。 我建议你​​不要尝试 要做到这一点。 例如,像如果一切 这是这里是正确的, 但你忘了冒号或支架, 您的代码将不会运行。 但是,我们可能是仁慈的。 是吗? 听众:你必须 我们的笔迹对此有何评论? 教授:不,不,不 有关后顾之忧。 没有评论。 风格应该是不错的。 喜欢就不要斯马什 一切都在同一行。 我们也不会开心 与你,如果你做到这一点。 有没有人要 给我的第一行? 提示,这是非常容易的。 是吗? 听众:智力,正等于零。 刚刚成立了柜台。 教授:所以我们需要一些 这类反了吧? 我只是将它命名为“算” 为了可读性。 什么是我们想将它设置为? 听众:零。 教授:是的。 分号。 这也是很奇怪的图纸分号。 只是练习这样做。 因此,我们要首先 int类型的计数器。 因为我们要计数如何 许多字符或字母 在这个字符串,对不对? 很容易的第一步。 好吧,也许有点更复杂 现在,我们怎么办呢? 有没有人要 给我的代码行 这或许能够帮助环 通过什么这是? 是啊,在后面勇敢的灵魂? 听众:好了,而点 星号了呀,星号, 不等于零,然后做什么? 教授:这是真的,真的非常接近。 真的很近。 所以,我要解决 两件事情这一点。 首先,它不完全为零。 它是什么? 这是空终止, 这是反斜线零。 因此,他们在不同的 术语的他们是如何存储。 所以,你真的很近。 其次,我们不希望 只是移动指针。 我们要以实际 访问值,对不对? 所以,我们怎么办呢? 好简单。 不要去想指针, 没有想到的回忆。 回到本场的2星期 听众:[听不清]。 教授:作为,还记得吗? 什么是弦? 他们是如何存储在内存中? 听众:他们提出的。 教授:他们提出。 那么,如何才能获得 每个角色里面? 听众:[听不清]。 教授:没错。 所以while--发生的事情里面吗? 为S - 听众:一。 教授:哦,我不存在,不是吗? 听众:哦,算什么? 教授:我们可以只 使用计数,我们不能? 听众:对不起,我把它叫做我。 教授:是的,这一切都很好。 我们有一个变量在这里这就是 已被宣布为我们的柜台。 那么,为什么我们不使用 移动通过while循环? 那有意义吗? 因此,尽管count--第有谁想 给我后,这里发生了什么? 听众:这不等于。 教授:不等于,对不对? 这是爆炸等于, 感叹号等于, 无论你们想 叫它不equal-- 听众:[听不清]。 教授:是的。 记住单引号是一个字符, 双引号是一个字符串。 在使用它们时要小心。 所以,当我们正在寻找通过 阵列,最后一个字符, 我们知道我们不希望 它是反斜线为零。 因此,虽然。 我们不是在字符串的结尾。 什么是我们想要做的里面? 听众:我们要添加到 计数器所以它计数加上加? 教授:没错。 所以在这里,我们要做的 计数,计数加再加。 缺少下一行。 我们快到了。 什么是我们忘了怎么办? 听众:返回零? 教授:你想回到零? 听众:没有,返回的strlen。 等待。 教授:存储在? 听众:计数。 计数。 教授:没错。 所以在这里我们要返回计数。 因为我们是 在这里做ultimately-- 我们有一个计数器变量那 要通过增加我们的字符串。 我们要继续前进,保持 去,一圈又一圈在这个循环。 虽然我们不是在本月底 字符串,它是空终止。 我们每次经过的时间 它,我们加入到我们的专柜。 而且我们要进一步 沿着这个数组。 而在最后,一旦我们 打空终结, 我们知道,哦,我们可以 打破,返回计数。 我们有我们的strlen。 是否每个人都得到如何 这是实施? 虽然loops--我知道我们有没有 做了太多的他们, 但它们通常 如果你非常非常有用 不知道你在什么停止 条件不一定必须是。 题? 听众:我们可以写空 在while条件? 教授:当? 是啊,所以这个问题我有你 球员认为旨意不能为空。 因为记得, 从理论上说,如果我给你 一个指针,过大的内存, 它会给你空了吧? 这就是操作 系统会做。 所以,如果我没告诉你承担 s就为空,则需要检查。 所以在这里,你会怎么做,如果s 等于等于空,返回之一。 类似的东西。 听众:[听不清]为零。 教授:好的,我会告诉 你为什么我们不能这样做。 因为记得在内存中,正确的,在这里。 我们会去这里。 你有巨大的块 内存的所有使用网格 那家店不同的价值观,对不对? 因此所有的字符串is--为 例如,如果我们要输入你好, 这将是H-E-L-L-O 反斜杠零,对不对? 然后谁知道,就像是随机的 东西都是在这里经过了。 我们真的不知道那里的东西。 所以,如果你做的 而不是反斜杠零, 空,但不可以为null。 因为它只是意味着 一些随机其他的东西 不属于在字符串中。 这样一来,方式,我们一直都知道 一个字符串结尾是用反斜杠零。 所以这总是我们如何 检查以查看一个字符串的末尾。 空,一切也就意味着,如果你有 一个不存在的指针,首先, 或者如果你的内存仅仅是如此之大, 你不能返回,那么这将会是零。 因此,差异化的时候要非常小心 空之间的差 和反斜线零。 是啊。 每个人都用这个好不好? 好。 所以,我有你们的strlen写出来的。 切实我们也可以问你写的 从A到我,请记住,“Atwoa” 或不管你们怎么称呼它? 该函数 的Vigenere和恺撒,这 转换成ASCII值的整数? 这也已经拿出了以往的测验 功能我们要求你写。 几乎所有的功能 你已经使用,是 很容易写自己, 传感器,如低, 为上,以降低,到上层。 功能,将转换 从小写的字符串为大写。 我们都知道该怎么做了吧? 这是很容易的。 只是想确保你 can--它是相同的思维过程。 你只要通过迭代 你扭转乾坤。 你要么计数或当 你把不同的事情。 我会suggest--我 不知道,如果我们要 请你记住什么资本A或 资本Z或小写字母A或小写 z是在ASCII,但我会建议 也许写下来的情况下, 我们的确是。 只是让你们有一个参考。 像大写字母A是什么,197? 然后小写就像50的东西。 65,是啊,你去那里。 所以才非常了解 它们之间的区别是32。 这是非常重要的。 是啊。 我是好上呢? 好。 听众:我们可以 理论上写一些 这些下降,以及对我们的little-- 教授:你从理论上 可以只复制功能下降。 确实如此。 听众:不[听不清]。 教授:你们有一个表。 你们有一个笔记纸。 您可以键入它。 你可以把它写。 你可以做任何你想做的事情。 是啊。 因此从理论上说,如果 你想,去的。 听众:[听不清] 但我们真的不 一定要记住 值,我们可以只 使用于上或 较低的功能,对不对? 教授:是的。 但是,如果我们给你个问题 上面写着写上, 那么你就需要把它写。 所以你们可以假设你 人可以访问所有功能, 但如果你要使用上或 较低的,你怎么还可以做什么? 听众:[听不清] 使用CS50 [听不清] 教授:是不是CS50.h? 要小心在那里。 所以要上,以降低, 为上,较低, 涉及功能 字符串操作是 所有在任一ASCII码 或数学库中 或串库中。 所以,如果你们使用那些 功能,小心要记住 以包括报头。 因此,或许也未尝您 希望在您的工作表,包括, 什么是头? 什么是图书馆 你一直在使用? 什么功能 里面那些库? 这一点很重要。 是吗? 听众:我们能不能​​只 警察出去做包括hashtag 通过绝对 每次我们有生以来信 见过像所有的问题吗? 教授:你可以。 我不知道有多开心 我们要成为等级 该测验时每一段代码 是两倍长它需要。 我不知道,我们可能 腾飞点的风格。 但理论上你 代码将是正确的。 你们能警察出来, 只包含一切。 这是一件好事,是的。 听众:[听不清]。 教授:是的。 我建议不这样做,虽然。 是啊。 听众:酷。 教授:这个问题问得好。 听众:所以,最坏的情况。 教授:在最坏的情况下。 如果你完全忘记了, 你能做到这一点。 是啊。 是的,代码就在这里。 我使用的n个,而不是计数,但你 知道的,不管你的船浮筒。 听众:等等,所以我们 就不必#标签 包括因为我们 在开始的诠释? 教授:是的,我只是假设 我们被要求写的功能。 如果你想成为安全起见,你 也许可以把它放在那里。 但我只是没有理会,是的。 我甚至不知道你 不需要任何库这一点。 因为你没有真正打印 出任何事或任何东西,对不对? 是啊,我不知道 你需要一个图书馆。 好。 这也是多一点沿 对内存的处理线。 这种有点棘手了。 想想这一点。 你有一个叫做FUNC功能。 我可以把它命名什么的, 但我选择FUNC命名。 我有我上面的主力。 请记住,你想拥有 主后的函数, 你要确保你 包括顶的雏形。 但在这种情况下,它是如此之短 我觉得我可以只 包括它上盖的主。 我并不需要有原型的, 因为它已经上面写的。 因此,所有我做我的主要功能 正在创建整数x等于10。 我打电话给我的FUNC功能, 然后打印一些东西。 然后这实际上 什么FUNC做。 你们要思考这一点。 因为它是一个有点棘手。 这是非常,非常棘手,其实。 想通过这是什么 程序会输出。 我给你们两分钟。 良好的讨论? 听众:是的。 教授:是的。 好了,所以这是 棘手的一个原因。 这就是为什么我想带 这对大家的关注。 没有人想给我 一个建议,企图? 什么会这样打印出来? 如果你错了完全罚款。 是吗? 观众:我认为这是100和 然后在两个10分开行。 教授:和一个10? 没有人有任何其他的猜测? 是吗? 听众:也许只是10,因为 FUNC没有返回什么? 教授:好了,我们 有猜测头号 是猜数二是 只是要打印出10。 没有人有任何其他的猜测? 好。 因此,让我们穿行这一点,对不对? 每当你得到一段代码, 不只是看它和像, 啊,那这么多东西! 我很困惑! 像,让自己平静下来。 只要知道你可以只 期待通过代码一行行。 这就是它。 这就像读一本书。 因此,与任何功能, 我们总是从主。 所以,我们要 开始INT主要无效, 即使该程序的 已经办下来了吧? 开始在主无效。 诠释x等于10。 所以,我要删除这一点。 我要画的内存,所以您 样的人能看到发生了什么。 记得到这里,我们有我们的堆栈? 在这里,我们有我们的 热闹的地方在这里。 堆栈长大,对不对? 而在栈中,你有 电源的功能,以及 所有电源局部变量。 所以在这里,诠释x等于10。 在我们的主函数我们 创建了一个变量x。 我们设置了等于10。 在这里,你有一些x和你 设置这等于10,没错, 内为主。 每个人都好? 功能。 所以,现在,我们的主要内 功能,我们称之为 我们已经写了上面的功能。 所以,我们现在进入了第二个功能。 我们要创建另一个 变量int x等于100。 这里发生的堆栈? 当你调用一个会发生什么 函数创建新的变量? 在堆在这里发生了什么? 听众:[听不清]堆在上面? 教授:是的。 因此,它实际上创建了一个副本。 它种在上面桩。 想想stack--一叠 书,一叠任何东西。 桩之上,先在上 出,后进先出。 因此,这将在这里打造一个x。 这将有 所有funcs中的变量。 大。 所以,现在我们有两个不同的x的是 代表了两种不同的事物。 然后我们要打印 出x的整数。 因此,让我们打印100,对吧? 因为这里是100。 所以这是第一件事情 这是怎么回事打印出来。 由于此函数返回什么, 既然功能,主要是线 已经完成了。 大家好我这么远吗? 所以我们现在是通过两个出 三行我们的主要功能。 现在,我们要在第三行。 我们要去给printf。 什么是主内该X? 这是什么代表什么呢? 什么值为x呢? 听众:100。 教授:这是100? 听众:仍有10。 教授:还是10。 是啊。 因为还记得,在 我们的FUNC,x等于100。 但是,如果我们返回 我们的主要功能, 该变量被存储在一个 不同的地方,我们的堆栈。 所以,现在我们需要回到 主堆栈,电源局部变量。 和这里x等于10。 所以,我们要打印出10。 于是,她是绝对正确的。 我们将有 输出的100和10。 是吗? 听众:当你的malloc,是它的 堆或堆栈中[听不清]? 教授:当你的malloc, 你从堆取内存 和分配它。 所以,你不必 惹任何这一点。 所以我想更大的外卖 这里是一些所谓的范围。 对于那些你们谁是在 审查会议昨晚, 我们短暂交谈这件事。 范围定义了如何和 当你的变量存在。 或在什么框架 做你的变量存在。 拇指差不多一般规则 是,你variables--如果你创建它们 大braces--里面却存在 只在那些大括号内。 因此,例如在我们的功能 FUNC,你看这两个大括号。 如果您正在创建 它里面的东西, 没准你正在做的是 创建堆栈和存储有。 同样的事情在主。 这只是存储的主要内。 你也想​​成为 非常,非常小心这里。 由于范围还借给 本身不同的例子。 因此,例如,一个用于 循环,对于int i等于0。 我不到,我不知道,10。 我加再加。 而你得到了它的内部代码,对不对? 在什么地方这个变量, 我,居然只存在吗? 只有里面的for循环。 所以,我敢打赌,你们的许多球员都有 可能遇到此错误时, 你在做节目的pset中。 有多少你们都试图利用我 for循环外有一个错误? 就像一个未引用的整数 或类似的东西? 之所以出现这种情况 是因为在这里你 创造的东西,只有 存在在你的for循环。 如果你尝试使用它,我不 它的外面确实存在。 因此,基本上一台电脑说,我 不知道你在说什么。 我所知道的是,一个我是 在这里,但现在已不再。 所以,如果我要创建一个 对于循环内,对不对? 而且我要创建一个, 如int j和有它做什么。 和你有内部的代码 这个循环,J只存在这里。 但是,这也存在内我。 所以Ĵ只存在 在这个循环, 而我存在于整个事情。 大家都清楚了吗? 同样的事情与条件语句 如果您要创建什么。 同样的事情while循环,如果 您要创建什么。 这是一件值得 非常,非常小心。 因此,这是一个很好的问题,在 某种意义上说,它证明了两件事情。 这表明第一,适用范围。 它证明 同时内存分配。 因为你们应该知道, 函数栈向上生长。 而且,当你调用 功能,您正在创建 内存基本上是一个新的堆栈。 即从非常不同 你的主内存是什么。 是啊。 呼! 每个人都在说好不好? 这是令人困惑的。 很好的话题走了过来, 因为你可能 会得到一些棘手 这样的事情在测验。 是啊。 凉。 我会把你一送100 行,然后10上的其他。 是啊,很不错。 好了,现在你们将得到 有机会成为助教。 你得到回答所有可爱 电子邮件,我有时会。 所以,亲爱的安迪,我看,我认为有些事情是 与我的编译器会出错。 我敢肯定,我的代码是正确的, 但我不断收到分段错误 我每次运行。 这是怎么回事? 请帮帮忙,很多的爱。 如果你们得到的东西像 那你会如何应对? 这些其实都是很常见 的问题,我们会问你。 如果是,我们会给你一个 情况下,我们会给我们 在发生了什么事情你最好的猜测。 任何人都有一个刺在这是怎么回事? 是吗? 听众:也许废弃的 空,像指针 指着一些空。 教授:是啊,这会是一个 例如,当这会发生的。 但是,什么是较大的图片 正在发生的事情就在这里? 听众:难道你想 访问内存,你是不是 应该可以访问? 教授:没错。 因此,认为一个赛格故障,关断 限制,在存储器禁区 你不应该动人。 所以,当你试图几乎 到index--像例如 您已经声明了 阵从0到9。 但你尝试触摸的第10 价值,你没有访问该。 因为你还没有宣布它。 所以,你的电脑是怎么回事 看那个像, 嗯哦,你试图去 外的索引的边界。 我想给你 段错误。 想想作为分段,对不对? 一个额外的段,该故障是 当您试图突破的东西 你不应该在那里。 段错误是随时 您尝试触摸的东西 你不应该动人。 因此,常见的例子是一个索引。 当然,如果你想 触摸到了那颗为空, 这也将正常工作。 如果你的指针试图 触摸的东西,不应该接触, 也可以正常工作。 最典型的你会 看到这个数组。 每个人都好? 听众:所以,如果你想 进入10点 而且也只有一个极限 九什么的。 教授:是的,没错。 漂亮多了。 凉。 亲爱的安迪。 所以,我们已经得到了这些精彩 东西叫做排序。 如果合并类别 - 正如我们 例如,当在锯 大卫做了全 在分类 - 东西为什么, 如果它是比如此之快 任何其他类型的, 为什么我们甚至不屑知道 任何其他类型的? 这个问题真是问你是什么? 什么是三word-- 听众:什么是取舍? 教授:没错。 这是什么的问题在问。 什么是之间的权衡 合并排序的诗句任何其他类型的? 听众:取内存,对不对? 教授:你 解释说,多一点? 首先,让我们解释合并店。 如何合并排序工作? 听众:所以它的工作方式 一切都划分成半 然后将其组合在一起 并重新分配它的秩序, 就像每次合并集。 教授:差不多。 所以,我可以借鉴这一点,但它会 带我五分钟就画出来。 回首一节幻灯片 在这里我们讨论合并排序。 究竟。 于是方式合并排序工作 它是把事情的一半, 然后它只是着眼于 所有这些的第一值 只有进行排序。 不断创造新的阵列和 使事情越来越多,为了。 因此而真的,真的 快,因为你知道it's--, 二进制搜索是n的n log。 你创造这么多 你是不同的阵列 使用大量的内存。 因此,虽然它更快,权衡 这里要说的是,你正在使用更多的内存。 因此,提示,排序和搜索 今年更是涵盖了很多 比他们已经在几年以前。 你们应该看到, 因此在测验反映。 我一定会花时间去 在什么所有不同种类 是,如何二进制搜索, 如何线性搜索工作。 如何也许是伪代码 这些代码了。 什么是运行时间? 类似的运行时间很 容易复制下来到笔记板, 对? 这真的很难,当你 在中间试验 你必须明白这一点。 它复制下来。 我向你保证你 将需要知道。 哪些取舍? 最糟糕的情况下,最好的情况下,场景 对所有的人都非常了解。 是吗? 听众:我们是否需要 知道如何编写合并排​​序? 喜欢,我们需要 记得递归? 教授:我很怀疑,只是 因为它像相当复杂的。 但它可能不是不可行,如果我们 请你用伪出来。 是啊。 是的,好了,多一个。 这可能已经拿出了 你最后一块在一个位。 是吗? 难道大家听到了吗? 好了,几乎第一 程序的所有,什么类型 将让你像这样的输出? 请记住,我们要求你了解 这种新型的调试工具? 什么是它的名字? Valgrind的,正确的 这是一个程序, 你可以调用,可以 保留所有你的记忆轨迹 使用你的程序,并是怎么回事。 所以,如果你已经得到的东西,比如, 肯定输了,40个字节的一个块。 也许你不 记住释放它。 因为如果你使用的字节的内存, 这意味着你已经访问内存, 但一直没能释放。 所以,你想 相信你也 使用free--这是一个 function--释放所有 的由malloc重新分配的存储器。 凉。 这张幻灯片,我要它。 它无处不在很多 讲座,在很多部分幻灯片。 你真的要确保 你只知道这一切。 无论是在你的笔记板,或者如果你 要记住它,随意。 这是真的,真的,真的很重要。 也是一个非常好的 问题是,我们可能会问。 为什么选择类别 - 看看 选择类别 - 所有运行时的 n个平方。 不管如何列表来 你是,那么为什么选择类别 - 我给你们30 第二想一想。 因为那种它的混乱。 它涉及到一些概念上的想法。 为什么会运行时间是在同 二者最差和最好情况场景? 是吗? 听众:因为选择排序每个 在这个小阵位或空间 事或什么的。 因此,即使在最好的情况下, 即使它完全排序, 它仍然只能是这样,好吧,之一。 在我的第一个地方,我有一个。 并通过他们。 OK,一个是最小的。 然后它又来了 是想,好,二 是最小的所有的东西。 但它仍然有 检查每一个人。 教授:是的。 因此,例如,让我们只说 我们有一个列表,已经排序, 阵列一至五个。 的方式来选择排序是 它通过,它会检查这两个。 然后检查这两个。 然后它会检查,而且检查。 它不断检查所有的人, 不管是否 它的实际排序。 因为这是根本 排序的工作方式。 所以这个问题是一种像 一个概念性的问题,我们会问。 其中第一,你 知道什么选择排序 是吧,要能 回答这个问题。 你必须要能够理解 从概念上发生了什么事情。 然后你可以将它和思考,确定 让我们试想一下,最糟糕的情况。 他们都是按降序排列。 将如何影响呢? 如果它是升序排列? 如果它已经排序? 将如何影响运行时? 然后选择排序,你会发现 它实际上并不重要。 因为你正在检查所有的 值不管发生了什么。 所以,好东西要记住。 为什么某些种类从别人不同 以及如何最好的和最坏的情况 会影响到所有的人。 我要真打的种类 因为这将是对测验。 是啊。 好。 还有剩下六分钟时间。 我可以采取三分钟的问题。 我也可以流连 像第20分钟后 如果你要问的问题也是如此。 有谁只是真的简单 疑问或概念问题 他们是不清楚的权利吗? 是吗? 听众:你能谈一点 关于位运算符位? 教授:是的。 所以按位运算符 一些你可能 可能只是想要把你的表。 所以quickly--我不想 深入进去太多 因为哈佛,在其审查 会议上,遮盖得很好。 位运算符,还有 五人,对不对? 有这一点,这是x或功能, 有符号,它是和。 管,这是或。 然后你有两个 不同类型的班次。 如果我给你两个值,如果 我给你一样,一个又一个。 你会计算结果为? 如果我给你真实,真实,是真的吗? 那么真的还是假的? 不过真的吧? 由于有一个或。 我们将最有可能给你​​的数字。 所以请记住,一等于 如此,零等于false。 我们可能会给你这些东西 并请您告诉我们发生了什么。 哈佛覆盖它内部的第一 10分钟他们的研究会议 真的,真的很好。 所以,你们要进行 确保您回首这一点。 听众:是pisa5 将要在测验? 教授:第 甚至不看pisa5现在。 这个很难(硬。 只是不甚至懒得看pisa5。 然而,由于一些提示 和建议,我 建议你开始pisa5 只要测验结束。 这将是最困难的 上周,但你们 将通过它在山上 连绵起伏的绿色和小狗的, 和它的罚款。 该类得到显著 第五PSET后更容易。 听众:办公时间 星期日,星期一? 教授:是啊,所以办公时间会 周日到周一为PSET。 今晚办公时间基本 也只是审查测验。 如果有人想进来,问 助教的问题,我们将在那里。 我带你去也许一个问题 如果任何人有问题? 是吗? 听众:当你 定义节点,[听不清] 如果你说下一个节点明星,然后, 自动执行电脑 了解您 谈到另一个指针? 教授:第 听众:你必须 重新链接[听不清]? 教授:所以基本上 一个节点的结构是,记住, 这就像你创建的节点, 那么你有一个被称为下一个指针。 所有你正在做的是具有 结构出现。 您必须分配 该指针的地方。 因此,计算机不 知道它在做什么呢。 你有实际的时候给它分配 你创建你的链接列表。 这就是主要 PSET 5将上。 所以不愁 任何现在的权利。 听众:所以我们并不需要 过于注重链接列表,只 一般的概念? 教授:刚才几乎栈, 队列,链表,树,哈希表。 只要能够知道它们是什么。 我们不会问 你喜欢什么具体 因为我们还没有真正做了 PSET的涵盖任何的呢。 因此,在最后两分钟前 我给你自由,来杀死这个测验。 差不多一样,想想怎么 到目前为止你们已经走在这个类。 我记得当2周 这个类,有些人的 花3小时写水。 多久会带你 球员现在写的水? 30秒后,也许? 想想多少 你们已经学会了。 CS是真的,真的很难受。 还有的是毫无疑问的。 这很难,这就是为什么没有人研究它。 这只是很难。 而且它是完全罚款。 而且我真的很自豪的是, 每个人都已经走到今天这一步。 的pset是不容易的。 他们采取了很多时间。 你这家伙,我绝不会要求你写 15人的Vigenere在PSET游戏。 没有必要只是吓坏了这一点。 所有我们这里测试是评估 您的概念性知识,以及 由于部分编码的基本技能。 该试验的目的是 真正具有挑战性的。 像,它被设计 你拿不到100。 它的设计也为您可能 不能够在75分钟结束。 而这完全罚款。 我是学生自己。 我知道,我恨它,当我走 出测验是这样,狗屎。 这是真的很难。 大概什么会 happen--而这完全罚款, 我告诉你们,现在。 这些东西的手段 不高的。 而对于那些你们谁 已经越来越像, 您的问题集三分球, 这并不意味着你 会得到60%的此类。 如果你在获得60% 测验,这不 意思是你要 获得A D在这个类。 我们看到,尤其是我,对于 在我的部分那些你, 我看怎么努力,你们都在努力。 我跟踪了。 你们将被罚款。 有没有机构记忆 幸福在学期结束。 因为所有的哈佛孩子们讲 他们的朋友,哦,你会没事的。 没有人告诉你们,在这里。 所以,我要告诉你们,在这里。 你们将被罚款。 我很自豪所有你们的。 该测试将是困难的。 研究它,事后 只是把它扔掉。 准备好学习新的东西。 吃糖果。 我们已经有很多的糖果。 得到一个良好的夜间睡眠。 不要不睡觉,因为 那会是非常糟糕的。 CS是一个很大的逻辑。 如果你不睡觉,你就无法运作, 你的大脑不能正常工作。 而且我会在这里为下一个20 分钟,如果有人想流连。 你们要杀死它。 祝你好运。