教授:那麼對於日程 這個星期,沒有那麼多的東西。 但希望非常,非常有幫助 而相關的你們這個星期。 但是,我們要花費可能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,涼。 所以,我給你們喜歡也許三 幾分鐘來看看這一個真正的快。 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 分鐘,如果有人想流連。 你們要殺死它。 祝你好運。