[Powered by Google Translate] DAVID J.馬蘭所有權利。
這是CS50，這是結束2週。
如果您希望明天的這個時候周圍是餓了，知道我們要去
召開會議，明天一小群，週四，1:15 PM。
這個URL，在這裡，如果你想回覆。
空間是有限的，所以請原諒，如果表單的時候，填補了你
填寫。
雖然可能感興趣的另一個URL是這樣的。
>> 因此，在，只是大約一個月的時間，當然是要提供
所有通過EDX，通過更廣泛的人在互聯網上
能夠跟著，從事的過程中，其實相當積極。
他們將使用CS50電器和CS50討論的，大部分的
各種軟件工具，我們已經一直在使用這個學期。
而其中一項措施，我們希望作為一個實驗，今年
我們可以看到多少內容翻譯成其他說
書面語言。
所以，如果你可能有興趣參與該項目，
我們將提供英語課程的成績單及字幕
講座和短褲，研討會及部分和 -
如果你會講一口流利的或寫流利一些其他的語言，我們會
愛，讓你在這個項目，讓你承擔一個或更多的
視頻，將其轉化為一個語言，你知道得很好。
為了讓你的界面感，還有這個基於Web的用戶界面
我們將使用，將創建基本上是這樣的一個UI。
這是我教一些萬聖節前。
和右手側有黑色旁邊這些時間戳，
你會看到不同的東西，我的嘴裡說出來的那一天。
然後在它下面，你會翻譯成一些其他的語言。
究竟是什麼之間的映射是，在這種情況下，英語
並說，西班牙。
因此，它實際上是一個非常用戶友好的工具。
您可以倒帶，快進，很容易與鍵盤快捷鍵。
所以，如果你想參加這個實驗，你的話
有可能有成千上萬的人看到和閱讀的，請不要感到
免費參加。
>> 現在，一個字約從週一小貓，免得我們已將過於
可怕的消息。
一定要明白，，辦公時間建議和段的建議，
課程的設計是非常有學生的協作和
說一起工作，通過習題集和問題。
真正的行歸結到了，你的工作，最終
應提交的應該是你自己。
所以，坦白地說 - 在辦公時間，這是完全正常的 -
它完全可以預期的，甚至 - 有一些聊天
你旁邊的朋友。
如果他或她掙扎著一些話題，和你一樣，哦，好讓
我給你看到，我寫了一些代碼行。
這很好。
出現這種情況。
這是非常有利的，我認為，學習的過程中。
在哪裡就行了，再次被越過時，頭是有點歪了
這裡真的有太多秒或分鐘，只
無障礙給你的朋友的機會。
當然，當事情變得交換通過電子郵件和Dropbox
等，也有是行。
因此，通過各種手段，手感舒適，感到鼓舞與朋友聊天
和同學約pset和更多。
而就認識到，真的是你最終提交
你的創造，而不是別人的產品的。
>> 因此，在同樣的可愛的動物，你可能會
知道這傢伙在這裡。
因此，從幾年前的電影，這是驚人的俗氣。
在這裡的任何人都看到“太空砲彈”？
好的。
因此，一個好的號碼。
因此，這是我們今天介紹的最後美妙的學術方式
密碼學的概念。
因此，pset的，這將前來領域特定問題
明天晚上到很晚，是潛入密碼學的世界，
信息的加密和擾碼是一門藝術。
而這最終涉及到世界的安全。
>> 立即安全對於大多數我們的形式相當平凡的機制。
我們所有的用戶名和密碼。
我們所有的人都非常糟糕的用戶名和密碼，最有可能的。
如果您在多個網站上的密碼是相同的，這可能是不
最好的主意，我們將討論對學期結束。
如果您的密碼是寫在一個便簽 - 可不是鬧著玩的 - 你的
顯示器，這也並不一定是最好的設計，而是一個相當普遍的
的現象。
而且，如果你不使用加密技術來加密您的密碼，它們是
特別脆弱。
所以，如果你認為你是超級聰明有一個隱藏的字
在您的硬盤驅動器上有你所有的密碼，但記錄的地方
它是在一個文件夾，沒有人會看，這也不是一個很
安全機制。
還等什麼的pset將介紹這是密碼學藝術的，
擾碼信息，如密碼，這樣的事情是
更安全。
所以這個非常現實世界中的問題，以激勵與非現實世界的
的情況下，讓我給你介紹我們最喜歡的片段之一，從這個
電影，“太空砲彈”。
>> [視頻回放]
頭盔，你的惡魔，什麼是怎麼回事？
你在做什麼我的女兒嗎？
請允許我介紹年輕的整形外科醫生，菲利普博士
Schlotkin，最大的隆鼻的人在整個
宇宙和比佛利山莊。
殿下。
鼻的工作嗎？
我聽不懂。
她已經有鼻子工作。
這是一個甜蜜的16個目前。
不，這不是你的想法。
這是非常，非常糟糕。
如果你不給我組合的空氣盾，博士Schlotkin會
給你女兒回到她的老鼻子了。
- 不！
你從哪兒弄來的？
- 所有權利。
我會告訴。
不，爸爸，沒有。
你別這樣。
- 你說得對，我親愛的。
我會想念你的新鼻子。
但我不會告訴他們的組合不管是什麼。
- 好極了。
Schlotkin博士，做最壞的。
是我的榮幸。
- 不！
等等，等等。
我會告訴。
我知道它的工作。
好吧，把它給我。
該組合是其中之一。
一。
二。
- 三
三。
四。
五
五。
所以組合是一個，兩個，三個，四個，五個。
這是我所聽到過的最愚蠢的組合在我的生活中。
那是白痴才會有這樣的事情在他的行李。
謝謝你，你的高度。
你做了什麼？
我關掉了牆上。
不，你沒有。
您關閉了整部影片。
我一定按錯了按鈕。
好了，把它放回去。
把電影。
是的，先生。
讓我們去，愛爾納。
來吧，格雷琴。
當然，你知道，我還是會向您。
好了，沒有工作？
門在哪裡？
它的工作，先生。
我們的組合。
- 太好了。
現在，我們可以從地球Druidia每一個呼吸新鮮的空氣。
什麼組合？
一，二，三，四，五。
一，二，三，四，五？
是的。
這是驚人的。
在我的行李，我已經得到了相同的組合。
準備空間球1立即離開。
是的，先生。
和變更的組合在我的行李。
- 噢！
[END視頻播放]
>> DAVID J.馬蘭：你現在應該看到一個驚人的電影。
因此，這裡的語境是不安全的數據來的機會
加密和爭奪它。
等，例如，是一個加密的消息的一個例子。
這實際上是說英語的東西。
但它顯然不是完全明顯。
我們將兜了一圈，今天捉弄除了這是什麼秘密
這裡的信息是。
但在現實世界中的電腦，事情並不甚至看起來會
是的英語句子。
例如，這是你可能會發現在一個標準的Linux或Mac或
Unix計算機中的文件，是很久很久以前被稱為密碼文件。
如今，它被轉移到其他地方。
但是，如果你的系統上，在正確的地方，你會看到不僅是你的
用戶名或系統上的其他人，但你會看到一個
他們的密碼的加密版本。
事實上，這個詞地下室有以下的東西是加密的。
而這一系列看似隨機的字母和字符和數字，
等等，都可以被解密僅由一般知道的一些秘密 -
一個秘密的話，一個秘密數字。
事實上，藝術的加密技術最終都歸結到信任的一些
排序和別人不知道的東西。
我們將探討這方面更詳細一點今天在pset中來。
>> 而現在通過/失敗的一個詞。
特別是一些潛入的pset，家電，和
一個很新的世界為自己，認識到挫折和
混亂和技術困難是可以預期的。
特別是隨著第一的pset，那裡有這麼多新的，剛開
熟悉的ls和cd，所有這些神秘的命令在一個新的環境。
這是從實際材料和編程本身分開。
因此，實現，也有一定存在的辦公時間
支承結構上。
節本星期日開始。
但是，最重要的是，如果你只是感覺這是不
你的世界，實現它確實只是需要時間。
，它不給我這個機會，幾年前對我來說，一類
通過/失敗，說實話，我永遠不會甚至踏上在教室裡。
你可以改變這件事，直到說，第五次週一的課程。
所以，如果你對現在的邊緣，而不是頭，實現了一些其他
完全水域，肯定會考慮轉變為通過/失敗。
同樣，有沒有真的這種文化在哈佛考慮的事情
通過/失敗，因為每個人都希望實現或超額完成。
但坦率地說，這是一個美妙的方式嘗試了，可能不
很熟悉的。
你會做在大多數情況下，相當精緻，也許
多給您驚喜。
更具體的，我覺得通過/失敗一般不，
尤其是當你可能經歷過的pset 0，如果你已經把
在10小時，15小時，25小時到一些pset中 - 和你只是撞
你的頭靠在牆上，
它的超級深夜，
但你在pset的方式，如90％，
你知道你只是無法弄清楚一件事 -
通過/失敗的真正的邊緣，這樣的一類，在這裡你可以排序
高興地說好了，我知道它並不是完美的。
但我的工作我的屁股上。
我很高興就結束了。
將滿足期望通過/失敗。
所以千萬記住這一點。
>> 好的。
因此，那些你們誰一直在努力使用哈佛大學的Wi-Fi知道
該有一CS50 SSID的，通過Wi-Fi連接周圍，漂浮
可能有更好的運氣。
這是一個有點諷刺的密碼 - 如果你想嘗試一下
更好的速度和連接到該讓我們知道，如果沒有更好的 -
是一，二，三，四，五，一路攀升到8，因為8是
更安全比五。
所以，如果你需要的Wi-Fi密碼，無線連接到CS50這裡。
一，二，三，四，五，六，七，八。
CS50後上討論，如果你仍然有間歇性的連接問題，
我們將讓權力知道這個空間。
>> 好的。
所以簡單的玩笑話，尤其是對於那些你們誰是風扇的男孩或女孩
所有蘋果。
我從幾年前挖了這個文件，ilock.c，只是為了
種更具體，更複雜一些更基本的C
我們一直都在寫程序。
於是，我打開了這個文件，ilock.c。
這是今天的講座頁。
在左側，你會看到一個長長的清單功能。
因此，研究員，這是誰寫的寫了很多的功能，
以上只是主。
在這裡，他用一大堆的庫。
如果我們開始滾動，這實際上是非常
第一，我認為，原來的iPhone破解。
當你想原來的iPhone越獄，這意味著untether
從AT＆T和實際安裝特殊的軟件就可以了，做的事情
蘋果沒有人做 -
好了，有人花時間來弄清楚他們是如何利用
軟件缺陷，錯誤，錯誤，在蘋果公司的軟件。
從而誕生了ilock.c。
如果你的計算機上編譯它和它的iPhone上安裝
說，通過USB電纜連接到您的計算機，這將給你
行政或root用戶權限在您的iPhone，讓你做很多
任何你想要的。
>> 所以這個迷人的貓捉老鼠的遊戲和蘋果之間的
特別是他們在世界各地的很多企業一樣，試圖鎖定
他們的東西，所以，你只能用它做什麼，他們打算。
但由於這樣的人，他們的低層次的認識
的細節，並在這種情況下，C編程和熟悉的結構的特定
我們已經開始玩，你能夠真正利用
硬件的方式，您認為合適的，而不一定是一些企業實體。
因此，舉例來說，我不知道這是做。
但是，GetVersion聽起來很簡單。
看起來這是一個函數，這個人寫的。
以某種整數作為參數，不返回任何東西，但
一個for循環和循環條件，如果條件下，如果
突破，並以某種方式涉及到的版本號。
如果我們向下滾動 -
儘管很多這些關鍵字將是新的，並有一個
一大堆的功能在這裡，我們從來沒有見過，可能不會看到超過
本學期的過程中 -
在一天結束的時候，它遵循相同的規則和邏輯，我們已經
玩迄今。
因此，這是破解你的iPhone 4S或3S或很快5S，這幾天太舊，
但要知道，這一切都非常來源於這個世界，我們已經看到
潛入。
>> 因此，讓我們來看看一個更簡單一點的例子。
這其中，只是為了獲得回暖的一些語法，也有一些其他的數據
類型，我們已經談到了，但還沒有真正出現在C.因此，這是一個
文件名為positive1.c。
每在上面的評論，這只是要求用戶提供一個
正數。
所以這是一個例子，一個do-whil​​e循環，這是很好的用戶交互
程序，你需要告訴用戶做一些事情。
，如果他們不配合，你罵他們，或拒絕他們的意見。
典型的例子，我該怎麼辦第19行到24這麼久的用戶
沒有給我一個正數。
現在，這個細節在這裡的​​第18行，為什麼我宣布這整個Ñ以上
循環結構，而不是右線22我
真正關心得到n？
是嗎？
[聽不清]
>> DAVID J.馬蘭：是啊，所以這個問題的範圍。
在外行人的術語，什麼範圍是指什麼？
是嗎？
[聽不清]
DAVID J.馬蘭：你能不能說大聲一點好嗎？
主講人1：在這裡你可以訪問一個特定的變量。
DAVID J.馬蘭：完美的。
在這裡你可以訪問一個特定的變量。
而且一般的經驗法則迄今為止一直認為，一些人的範圍
變量的定義是，你已經看到最近的花括號。
因此，在這種情況下，如果我犯了個錯誤n在第22行聲明，
該行會的工作。
我會得到一個int，我希望把它變成第22行中的變量n。
但是，這行代碼將不知道我說的是什麼呢？
所以，25，事實證明，24為好，因為在這種情況下，它不屬於
大括號。
因此，只要一點點的滋擾，但很容易解決，只需聲明
變量以外的函數本身。
>> 現在，我們可以看到以後的今天，你可以走了一步。
你甚至可以得到一個有點懶惰 -
，這是不被推薦的，在一般情況 -
但你甚至可以偷懶，把一個全局變量，可以這麼說，不
內的一個函數，而不是一個循環的內部，但在文件本身，外
所有的功能，你已經寫了，因為我在這裡的第15行。
但是，這一般是不可取的。
但是，認識到這一點是有時其他問題的解決方案，我們將
最終看到的。
因此，就目前而言，我們將保持這樣的。
但是，讓我們看看我們是否能改寫這只是開始表達自己在一所房子裡
略有不同。
>> 因此這個方案，僅僅是明確的，是陽性。
讓我繼續在這裡，在我的終端窗口陽性，回車。
編譯，沒問題。
我要去，運行positive1，按下回車鍵。
我要求你給我一個正整數。
我會說：-1。
沒有工作。
0，99，這似乎是工作。
也許不是最嚴格的測試。
但至少這是一個不錯的完整性檢查，我們正在正確的軌道上。
所以，現在讓我繼續前進，打開這兩個版本。
有什麼不同了嗎？
它實現了同樣的事情。
但是，什麼是跳出為明顯不同時間？
是啊，所以這個布爾綠色。
gedit有綠色高亮顯示該關鍵字被稱為布爾，
這是一個數據類型。
它不內置於所有版本的C.你需要包含一個
具體的庫。
在我們的例子中，我的CS50庫，使我們
有機會為bool。
但在第18行，我們似乎有一個布爾值，這裡所謂的感謝。
所以，我可以把這種現象稱之為什麼。
但我把它叫做感激只是一種傳達一些語義上的意義。
因此，最初的第18行，我顯然不是感謝，因為
布爾值，感謝在第18行初始化為false。
然後，它似乎是我在這裡做了21行〜23是我剛剛
種重寫我的邏輯。
所以沒有功能不同的。
但在第22行，我現在檢查，如果int用戶提供了大於
0，那麼我只需更改感謝真正的價值。
我為什麼這樣做呢？
因為在第25行，很顯然，我要檢查的條件。
做這個循環，同時感謝是假的。
>> 因此，我建議這是一個版本的替代品，因為它至少一個
更直觀一點，也許吧。
這是一個有點植根於英語。
因此，請執行以下操作，而你不感謝，同時感謝是假的。
而這個時候，我顯然不關心記住用戶輸入的是什麼
因為通知中沒有任何變量n。
因此，實際上，I -
一個善意的謊言。
在功能上，該方案是一個有點不同的，一旦我們得到的底部
它，因為我不記得n是什麼。
但我想在這裡展示我們已經看到過，即使調用getInt和
正在使用的右手側的一個等號的GetString迄今，使得
我們記住它們的價值，從技術上講，這不是絕對必要的。
如果由於某種原因，你只是不小心保存的價值，你只是想
檢查該值，請注意，我們可以簡單的寫調用getInt開放
括號，關閉括號。
該函數會返回一個值，因為我們一直在說。
這將會給你一個int。
所以，如果你在精神上認為這種情況發生，當我輸入99，調用getInt
返回數字99。
因此，從理論上講，這是因為雖然我的代碼，其實這。
因此，如果99的確是大於0，然後感謝變為真。
第25行實現哦，我們正在做的，因為我現在感謝。
而在第26行，我們簡單地說，感謝為正整數，不管它
碰巧。
>> 現在，讓我們在這裡做輕微的語法糖，可以這麼說。
讓我們來看看，如果我們可以清理這條線，這第三個和最後的25方差
在positive3。
因此，注意到現在唯一的區別是哪一行代碼？
是啊，所以25。
我們還沒有真正看到這一招只是還沒有。
但是，我們也看到週一的感嘆號，這表示什麼？
因此，沒有或否定。
因此，需要一個布爾值，，並翻轉它的價值。
真亦假。
假變為真。
所以，我建議，即使是一點點的一種方式，更直觀
編寫的代碼，因為我仍然會初始化為false感謝。
我還是做到以下幾點。
我感謝設置為true，在時機成熟時。
但現在你可以真的只是翻譯代碼口頭左到右，
同時感謝。
由於爆炸，或驚嘆號，表示不的概念，因此，雖然
不心存感激。
>> 所以，再一次，我們沒有引入任何新的概念本身。
我們已經討論了布爾值，當我們從頭打了。
但現在認識到，我們就可以開始寫我們的代碼
許多不同的方式。
因此，特別是在pset1移動，如果你有幾分努力找出的方式來
請編寫一些程序，你很幸運，因為有將是任何
的解決方案，您可以發生在數。
舉例來說，即使是最簡單的程序，這僅僅是3。
好的。
現在記得上週一，我們留在這有返回值的注意。
因此，對於第一次，我們寫了一個程序，不只是有主，
它也有它自己的自定義函數，我寫在這裡。
因此，在31〜34行，我已經實現了一個多維數據集函數。
這並不複雜。
這只是一個次次，在這種情況下。
但重要的是它是我輸入的形式
我回輸出的形式的時候，一個次。
>> 所以，現在我有能力，就像我用printf單獨使用，調用
多維數據集函數調用這個函數。
和多維數據集的功能需要一定的投入。
和多維數據集函數返回一些輸出。
因此，相比之下，輸出只是做了一些事情。
它沒有返回任何東西，我們關心的 - 即使作為一個
一旁，它返回一個值。
您通常會忽略它。
的printf只是做了一些事情。
它有打印到屏幕上的副作用。
反差，在這裡，我們有多維數據集的功能，這
實際上返回的東西。
>> 因此，這是一般 -
對於那些熟悉，這是一個非常簡單的想法。
但是，對於那些不太熟悉這個想法傳遞輸入和
背面輸出，讓我們嘗試只是超級簡單的東西。
是任何人都舒服了舞台上簡單嗎？
你必須是舒適的與你的相機，以及。
是啊。
好了，你叫什麼名字？
KEN：肯。
DAVID J.馬蘭：肯。
所有權利，肯。
上來吧。
所以，肯將是各種各樣的功能，在這裡。
讓我們繼續做到這一點。
讓我們一點點花哨。
認識你很高興。
歡迎來到舞台中央。
好的。
讓打這個按鈕，在這裡。
好的。
所以，在這裡你有一個現代化的黑板上。
我的主要功能是，例如。
我沒有一台iPad拿在手中。
我真的不記得怎麼樣 - 好了，其實，不能說。
我真的沒有很好的筆跡。
所以，我希望你能在屏幕上打印的東西對我來說。
>> 所以我的主要程序。
我要你說，這寫在我的雞從頭開始，
然後將你的輸入。
因此，儘管這項工作是愚蠢的，函數的概念，並調用
功能，並返回一個函數真的歸結到這。
我主要的。
我剛才寫在屏幕上輸出（“東西”）。
我運行這個程序。
如printf被調用，它需要一個參數 - 或一個參數，
有時 -
雙引號之間。
這裡有這樣的說法。
我把它傳遞給肯。
現在，他寫了一些數年前，顯然是一個黑盒子
只有知道如何打印在屏幕上的東西。
>> 所以，執行。
這是不壞的。
所以，很不錯。
所以，現在肯執行。
他遞給我任何東西嗎？
因此，到目前為止，我們已經看到的。
同樣，printf並返回一個數字。
但是，我們要忽略的是現在，因為我們從來沒有用過它。
所以這是它為肯。
因此，現在主要來執行 -
主要接管程序的控制，因為這行代碼，
printf中進行執行。
我們去了解我們的方式執行的任何其他線路有。
>> 好的。
現在讓我們嘗試一個稍微不同的例子。
這一次，在這裡，讓我們先來清除屏幕。
而這個時候，我們會做的魔方功能。
但是這一次，我期望的輸出值。
因此，讓我們繼續前進，並做到這一點。
所以，現在我有一個行代碼，說X =立方體（X）。
因此，實際上let's -
行的代碼，召回，看起來是這樣的。
X =立方體（X）。
所以，這是怎麼去上班？
因此，讓我們繼續前進，並給你一個白色的屏幕。
我要現在寫下來的x的值，在這一刻
時間發生，讓我們說，2，保持它的簡單。
因此，我已寫在一張紙的價值2，
這是我的x值。
我把它肯。
KEN：我只寫答案是什麼？
DAVID J.馬蘭：是啊，讓我們只寫答案。
好吧。
現在他已經回到我的東西。
所以 -
完美的。
尼斯SEGUE。
>> 所以，現在他遞給我回值8，在這種情況下。
我該怎麼辦呢？
嗯，其實，讓我們來看看。
得到這個權利。
我會用它做什麼呢？
現在，我將這個值和實際存儲在這些
在存儲器中的相同比特。
但是，請注意，我是那種掙扎在這裡。
我有點困惑，因為我在哪裡寫x的值嗎？
因為我剛剛做的是需要親自肯一張紙
的值是2，這為x。
事實上，這恰恰會發生什麼。
因此，原來，當你調用一個函數，並傳遞參數
喜歡的“Hello World”，或者你傳遞一個參數，如2，一般，你
通過在副本這樣的說法。
所以，正如我寫下的2號這裡，並把它交給肯;
意思是，我仍然有一份價值2的地方。
因為事實上，現在我已經得到了值8，我需要回去
RAM寫下我曾經有過的數字2。
>> 所以，直觀地記住這個概念在字面上通過
值的副本。
肯做他的事，交給我的東西 - 在這種情況下，
這樣的值8。
然後，我與價值的東西，如果我
要保持它的周圍。
因此，所有這一切都將是所有太熟悉了不久。
非常感謝你在這裡演示，肯。
好的。
非常好。
因此，讓我們來看看如何，最終涉及到的一些功能
調用，我們一直在這裡做什麼。
因此，讓我繼續前進，把我們帶回了魔方的例子在這裡。
注意到，如果我們要真正開始採取進一步，我們將
必須注意的一個事實，即數x被傳遞
這裡實際上被傳遞到函數是不同的。
所以，再一次，通過複製將變得相當
鍺在短短的時刻。
>> 所以，讓我們來看看在一些不相當的工作。
我會繼續前進，打開第三個馬車例如，
是有缺陷的性質。
它被稱為buggy3，和它實現了一個交換的功能。
所以，在這裡，我們有一個主函數，x和y的任意初始化為
分別為1和2，。
我們可以使用調用getInt，但我們只需要一個簡單的練習。
因此，它是硬編碼為1和2。
在第21行和22行，我們似乎打印出x和y，每行一個。
然後，在第23行，我要求我交換這些值，點，點，點。
顯然，我在第24行調用一個函數，稱為交換
，它有兩個參數。
這是完全合法的，採取兩個參數的函數。
我們已經看到輸出已經做到這一點了。
所以交換顯然x和y。
正如它的名字所暗示的，我希望這是怎麼回事
交換這兩個值。
因此，我要求在第25行，交換。
我轉載的假設下，x和y
我的確被換。
但是，如果我運行這個程序 -
讓我打開一個終端窗口。
讓我做buggy3。
正如它的名字所暗示的，這是沒有好下場的。
因為當我按下Enter鍵，注意x是1。
y為2。
但在程序結束時，他們仍，其實，是一樣的。
>> 因此，根據示範與肯，剛才到底發生了什麼？
好吧，讓我們深入到這個交換功能。
它的超級短。
這是只有幾行代碼長。
但是，什麼是最根本的問題的基礎上簡單的故事告訴
在這裡肯嗎？
交換為什麼壞了？
[聽不清]
沒錯。
因此，我們要存儲的副本，而不是變量本身。
換句話說，交換顯然有兩個參數，一個int。
它的任意稱為A和B。
這裡，我已經通過在x和y，分別是1和2。
但我不是真的通過在x。
我不是真的在y傳遞。
我是通過x和y的副本的副本。
這就像幾乎就像交換的值複製和粘貼
你希望它是實際操作。
所以，如果是這樣的話，當我的程序，開始執行
線35，然後36 -
當我到37行，在這一點上的故事，是什麼值呢？
在這一點上的故事，37號線，在這一點上的價值是什麼？
因此，它應該是1。
對嗎？
因為x的第一個參數中傳遞。
而這個函數只是任意調用它的第一個參數，一個。
同樣，第二個參數為y。
它只是隨意調用的第二個參數b。
>> 現在這種兩分法其實是相當簡單的解釋。
想想吧。
我們沒有見過的人誰寫輸出。
因此，毫無疑問，他或她不知道30年後，我們的變量將
被調用。
所以，必須有區分你調用中的變量
功能，你寫的，你在你的函數調用變量
打電話或使用。
所以，換句話說，我寫了我的變量x和y。
但是，如果別人已經寫了交換功能，他或她肯定
不知道我的變量來調用。
所以認識到，這就是為什麼你有這種二元性的名稱。
從技術上講，我可以做到這一點巧合。
但他們仍然會通過為副本。
這僅僅是一個純粹的巧合美觀，如果那個人是誰寫的
交換使用相同的名稱。
>> 好的。
所以在這一點上故事中的第37行，一個是1。
b是2。
現在我進行交換。
首先，讓我真正做到這一點簡單得多。
我不知道這三行代碼做什麼。
讓我做到這一點。
b得到。
一個得到b。
完成。
為什麼是這個破碎的，邏輯上嗎？
這是一種直觀的東西，對不對？
因此，一個變成了B。
B變成A。
但問題是，盡快執行第37行，有什麼
a和b的值？
相同的是，1。
因為你打一頓，可以這麼說，你已經改變了b為一個。
所以，第37行執行，這是偉大的。
你現在有此功能的號碼1內部的兩個副本。
那麼，當你說在第38行，得到b，好了，你種擰緊。
因為你只是分配1比1。
你失去了你關心的價值。
>> 因此，在原始版本，請注意，我就是這樣做的。
我不是有三分之一的代碼看起來是這樣的。
我聲明了一個臨時變量 - tmp是一個很常見的名字
一個臨時變量。
它是一個int，因為它符合我要的副本。
存儲副本的tmp目錄內的。因此，一旦線路37條的執行，
a的值是 -
快速完整性檢查 -
1。
b的值是2。
TMP的價值也是1。
所以，現在我執行第38行。
因此，一旦執行第38行，一個需要的b的值。
和B是2。
因此，一個現在是2。
所以在這一點上的故事，一個是2，b為2，
tmp是1。
所以，現在從邏輯上講，我們只是撲通TMP到b的值。
我們就大功告成了。
>> 因此，我們已經解決了這個問題。
不幸的是，當我運行這個程序，在這種形式，它並不實際交換
任何值。
但要清楚，為什麼呢？
我剛才固定的邏輯問題。
但同樣，如果我運行這個程序，X和Y保持不變，年底
該計劃的執行。
[聽不清]
DAVID J.馬蘭，因此，我們不返回任何東西。
所以，這是事實。
但事實證明，這裡有一個有點問題，因為到目前為止，
，我們已經能夠返回的唯一的一件事。
這是一個限制，您可以只返回一個真正的價值，
在這種情況下，我被堵到了這裡
因為我可以返回新的x值，否則我可能會返回
新y的值。
不過，我既要回來了。
於是久違這裡沒有簡單的解決方案。
但問題的根本是為什麼呢？
我們有什麼實際交換？
a和b。
但是，a和b的副本的x和y，這意味著我們只是做了這一切
- 我們只花了像三分鐘談交換
功能和所有這三個變量。
這是偉大的，完全正確的，孤立的。
但是，A和B的範圍不僅是在這些行。
因此，就像一個for循環，如果你聲明一個整數i在for
環 - 同樣，如果你​​聲明a和b裡面的功能，
你寫的，他們是該函數的唯一有效的內部。
這意味著只要交換是執行，我們從線24條，
線25，x和y沒有被改變。
你只是浪費了大量的時間交換的變量的副本。
>> 所以，事實證明，要解決這個實際上是不很明顯。
這不是很充足的返回值，因為我們可以
只返回一個值。
我真的想交換x和y都在相同的時間。
因此，我們要回到這個。
不過，現在認識到這個問題從根本上源於一個事實
a和b的副本。
他們是在自己的範圍內。
好吧，讓我們以某種方式設法解決這個。
讓我真正滾動回到這裡，開拓，讓我們說，第四個變種
此，buggy4。
又是怎麼回事嗎？
這是一個類似，但更簡單的看問題之前，我們採取一捅
解決它。
這項計劃被稱為增量。
它顯然初始化的x為1的整數，在第18行中。
然後，我x是1。
然後，我聲稱遞增，點，點，點。
然後我打電話增量。
但隨後在22日和23線，我要求它已經增加。
我要求x是現在不管它是什麼，大概是2。
>> 但這種方案是不穩定的。
有什麼問題嗎？
是嗎？
[聽不清]
DAVID J.馬蘭：沒錯。
所以X顯然已宣布的第18行。
這是內主要的大括號中。
所以，簡單的答案是，在這裡，x存在。
它不存在於線32。
因此，這個程序實際上不會編譯。
編譯器，當我嘗試編譯這段代碼時，會罵我
一些未聲明的標識符或東西的效果。
事實上，讓我們嘗試。
這是使buggy4。
在那裡，它是。
使用未聲明的標識符x線32。
而實際上，讓我們更加明確，今天在這裡，這是非常有用的
辦公時間和在家裡。
請注意，這是一個有點神秘的書面。
但事實上，鏗鏘有對我們大吼大叫，說
buggy4.c：32:5，實際上是有用的。
這意味著，該錯誤是在字符位置5的線32上。
因此，一，二，三，四，五。
這是，事實上，問題出在哪裡。
同時要記住，在辦公時間，在家裡，我很幸運在這裡。
我有一個錯誤。
這將是比較容易解決的。
但是，如果你獲得壓倒性的錯誤消息，再次充滿整個畫面，
實現最底層的人可能只是對症
最頂層的。
因此，總是追逐你的錯誤，從上而下。
因為有可能只是一個菊花鏈的效果，建議你
有比你實際做的方式更多的問題。
>> 那麼，我們怎麼能解決這個問題，如果我的目標是增加x？
那是什麼？
好吧。
因此，我們可以使X全球。
讓我們走捷徑，我警告早期。
不過，赫克說，我們只需要一個快速解決。
因此，讓我們在這裡說詮釋x。
這使得X全球。
所以，現在主要有訪問它。
而增加的訪問。
因此，讓我繼續前進，現在編譯這個。
，輸入使buggy4。
似乎現在編譯。
讓我們來運行buggy4，它似乎實際工作。
現在，這是這些東西之一 -
聽我的話，還不如我呢，我剛剛在這裡完成。
因為整體來說，我們的計劃將變得更加有趣，
比這更長的時間。
如果您解決生活中的問題是啊，把所有的
在文件的開頭的變量，很快就做節目得到
驚人，難以管理。
它變得很難想出新的變量名。
它會更難理解變量是做什麼的。
>> ，因此，在一般的，這是不是一個好的解決方案。
因此，讓我們做到這一點。
我們不想在這裡使用一個全局變量。
我想增加x。
所以，我可以很明顯 -
在一天結束的時候，這是一個愚蠢的故事，因為我們只要做到這一點。
但是，如果我不知道，運營商，或我沒有被允許到
改變它在主本身，怎麼可能我實現了肯在這裡，這
時間到多維數據集，但增加？
我該如何改變這件事情嗎？
是啊。
[聽不清]
DAVID J.馬蘭：好，好。
那麼，為什麼不讓我通過在x？
然後，而不是返回它，為什麼不，我只是做回X + 1？
現在，一對夫婦更多的東西必須改變。
我在正確的軌道上。
還有什麼我需要調整嗎？
別人。
是嗎？
[聽不清]
DAVID J.馬蘭：我需要改變的返回類型增加
因為它並非無效。
虛空意味著什麼也沒有返回。
但顯然，現在是。
因此，這需要改變int以符合任何
實際上，我回來了。
>> 現在別的東西，是大聲喧嘩。
是嗎？
[聽不清]
DAVID J.馬蘭：所以我需要增加x？
[聽不清]
DAVID J.馬蘭：啊，所以我需要傳遞X。
所以我需要在這裡做到這一點。
因此，原型，我必須要改變這個在這裡。
因此，這成為一個int。
這成為 -
嗯。
其實，我這裡有一個錯誤。
讓我們來解決這個問題第一次。
應該是什麼內容究竟是什麼？
因此，它必須是一個int的東西。
它可以是x。
但是坦率地說，如果你開始調用所有的變量x，它會得到
越來越不清晰哪個是哪個。
因此，讓我們任意選擇一個不同的命名約定為我的
輔助函數，我寫的功能。
我們將調用它。
或者，我們可以把它稱為 - 我們姑且稱之為，它even_number更明確。
於是我返回任何數加1。
現在，我必須要改變一個其他的東西在這裡，一個
其他的東西在這裡。
我有什麼改變第21行第一次嗎？
我有把它分配給x。
這樣我就可以不叫增量x。
通過改變x的值，我需要記住的答案
左手側。
即使x是現在的左，右，這是完全正常的，因為
首先被執行的右手側，然後被撲通進入左
手的事情，x在這種情況下。
最後，這是一個簡單的辦法。
這應該匹配什麼是向下。
詮釋號。
>> 好的。
那麼一大堆的一個非常愚蠢的功能的變化。
但代表，我們將越來越多地想要做的事情。
因此，請buggy4。
我搞砸了的地方。
哦，我的上帝。
五個錯誤一樣，一個六行的計劃。
那麼，什麼是錯的第18行，字符？
好的。
所以，我要聲明這個中斷。
好的。
所以，讓我們來看看，一大堆其他錯誤。
噢，我的上帝。
19，18，21。
再次，讓我們清除屏幕 -
控制L - 並重新運行鐺。
因此，五個方面的問題是實際上只是一個。
所以，現在讓我們來運行buggy4，回車。
哇！
x已經被正確地遞增。
>> 好的。
如何增加數字的任何問題？
是嗎？
主講人2：為什麼是它，你可以只改變x的變量數
命名，它會知道你是什麼意思？
DAVID J.馬蘭：好問題。
它是如何，我可以只改變x的數量，程序將知道
立即嗎？
所以，再一次，把它作為這個抽象。
所以，如果我主要和Ken是漸進式的，坦率地說，我不關心
什麼肯稱，他的iPad。
我不在乎他所說的什麼，做他的執行
這個功能。
所以這是一個實現細節，我，主，不
有關心。
因此，簡單地改變它一貫裡面的功能，號
和數量，是需要很長時間，我重新編譯。
這是有點像，如果你認為的 - 很多人來說，你的驅動程序的
許可所驅動，或者如果你即使在汽車驅動 -
我們大多數人不知道如何汽車引擎蓋下的。
從字面上看，如果你打開引擎蓋，我們大多數人 - 包括我自己 -
不會真正了解我們正在尋找。
有點像你可能會覺得現在的東西，如這項權利。
但是，我們真的不關心汽車是如何工作的。
我們不必關心所有內部的桿和活塞和電纜
汽車實際上是在做什麼。
>> 所以像你所說的活塞無所謂
這裡在這種情況下。
同樣的想法。
是嗎？
[聽不清]
DAVID J.馬蘭：如果有更多的用途的變量XA時刻前，
作為程序員，你將不得不改變他們無處不在。
或者你可以從字面上文件，菜單，然後查找/替換，
類似的東西。
但是你將不得不讓自己的這些變化。
你必須是一致的。
[聽不清]
DAVID J.馬蘭特定的順序：A喜歡這裡嗎？
如果這是int的另一個電話號碼嗎？
是啊。
因此，為了重要的，當你調用該函數。
所以，如果我在這裡呼籲增加的東西逗號東西，
有一個直接的映射。
第一可變，無論它的名字，作出了第一個副本
在這裡的論點。
對不起，這不應該是一個括號。
第二個參數與第二個。
>> ，是的，所以，為了事宜。
好的。
對不起，我花了很長的路到那裡。
其他問題嗎？
好的。
因此，讓我們來看看，如果我們不能畫一幅畫，實際上
引擎蓋下的，可以這麼說。
因此，這是一個矩形，可能代表你的計算機的內存。
所以，即使你不知道如何記憶或RAM作品如何，至少
假設你有束的這些天。
你得到了它的兆字節。
你有GB的。
我們知道，從週零一個字節是什麼？
8位。
對，所以8 0和1。
所以，如果你的計算機有一個演出的RAM，2個演出的RAM這些日子裡，你有一個
億或2億字節的內存，或大約8億美元或16億美元
位，您的計算機內。
現在不像的小綿威利例如，它沒有磁性粒子
典型的了。
越來越多的，至少在筆記本電腦，它的固態硬盤，固態硬盤，
只是沒有移動部件。
這是所有的電子。
這是所有的電力基礎。
因此認為，雖然，這個矩形代表一個或兩個
GB的記憶體，你有。
>> 因此，它是一個內存塊。
現在世界上的計算機科學類的分區塊
內存做不同的事情。
因此，舉例來說，如果這是您的計算機的內存 - 所建議的
矩形 - 原來，按照慣例，在您的RAM的頂部，所以
說，一般是什麼所謂的文本段。
這些都是零和的，你已經編譯。
因此，當我們已經看到引擎蓋下的a.out是什麼，所有
0和1 -
當你運行一個程序時，這些0和1，從您的硬盤裝入
到一些所謂的RAM驅動器。
在RAM中，他們把在頂部。
同時，你還有其他的事情。
初始化數據，未初始化的數據。
這兩個大片的內存是指為全局變量，
你不經常使用。
但有時如果你這樣做，他們結束了在那裡為好。
此外，還有一些其他的東西。
環境變量，我們不會花太多的時間。
但隨後的兩件重要的事情會回來整個
學期，堆棧和堆。
>> 因此，大多數您的計算機的內存中運行的程序時保留
一些所謂的堆棧，稱為堆的東西。
我們不會談論堆，但我們會
談論的堆棧。
和堆棧是為了喚起了視覺像食堂
餐托盤Mather中樓，或任何你碰巧是，這裡的
食堂的工作人員清理他們的每一天。
它們堆疊起來，從地板上起來。
同樣在內存中，有這種想法，把一些在
疊加，將在棧上的東西，把東西在棧上。
是什麼意思呢？
好吧，讓我們放大只是這張照片的下半部分，您的電腦
RAM，提出以下建議。
原來，當你運行一個程序，如a.out格式“或”你好，什麼
該程序是你寫的，
再次，從您的硬盤驅動器加載這些0和1 -
長期儲存，在那裡停留，即使你拔掉插頭 -
加載到RAM中。
RAM的速度比硬盤驅動器。
這是小於硬盤驅動器。
但它的節目直播，當你運行它們。
>> 所以，你雙擊一個Mac或PC上的程序 - 它裝載
到RAM中的硬盤驅動器。
只要它加載到內存中，0和1的方式上，
所謂的文本段。
但是，當你的程序啟動運行，主要
函數被調用。
為主，正如我們已經看到的那樣，經常有局部變量。
它有整型和字符串和字符之類的。
所以，如果你的程序，你寫的程序，你有
雙擊內主要使用的一些變量，他們最終在
你的內存堆棧的底部，可以這麼說。
現在更具體地說，這是什麼究竟是什麼意思？
這也就意味著，如果我們要怎樣數算自己的事情 -
如果我們要在您的計算機數量的字節RAM，請注意，
這可能是字節數為0。
這可能是字節數一，二，三，四，五，六，所有
喜歡 -
2億美元將一路攀升，在頂部。
所以，換句話說，當我們談論RAM或內存中的字節，
只是意味著有人已經決定號每
這些內存塊。
>> 所以，當你需要32位的int，或者你需要一個字符的8位，其中
他們結束了在內存裡？
那麼從理論上講，他們剛剛結束了在底部的
東西叫堆棧。
但現在有什麼有趣的是，當主調用一個函數。
假設一個函數調用foo的，只是一個任意的名稱。
會發生什麼更主要的是在這個堆棧的底部的內存。
美孚現在被放置在頂部的主內存中。
因此，任何局部變量foo的最終排序的概念上以上
在主。
如果foo調用另一個函數調用酒吧，這些變量在這裡結束。
如果酒吧調用別的東西，在這裡，這裡，這裡。
那麼，在運行了一個程序很有意思的是，當你調用函數，
那些函數調用的函數，這些函數調用功能，
你建立了這個堆棧在內存中的功能。
而只有一個函數返回後，你開始，內存。
因此耗盡內存在計算機程序中最簡單的方法之一是
寫函數從不返回。
>> 因此，舉例來說，讓盡可能多的展示與
故意錯誤的程序。
讓我繼續前進，不要＃包括的，詮釋的主要（無效）。
我該怎麼辦（2​​> 1），這可能將永遠不會
改變我們。
讓我繼續做輸出。
事實上，這將是在視覺有趣的。
讓我們這樣做。
為Int（i = 0; I> 0）。
讓我們犯這樣的錯誤，我+ +。
讓我們在這裡不是printf。
我們的做法是我的說教。
讓我們在這裡有一個方法。
虛空的合唱，我們會說INT I。
然後我會說，輸出 -
哦，讓我們使這更有趣的。
讓實際不打印任何東西，在所有。
我們只要做到這一點。
合唱團（I）。
>> 好的。
因此，這是越野車，因為為什麼呢？
我正在做這件事，因為我去的，因為該計劃實際上並沒有做什麼
的興趣。
但是，這不是目標。
我們的目標是編寫一個程序，做什麼，顯然，其主要功能？
調用自身。
實際上，我們並不需要循環。
讓我們甚至簡化這只是因此，不要忽視真正的
根本的問題。
主要調用合唱團唱一些合唱。
然後我做了一些愚蠢的事情，和我有合唱的呼叫合唱團，因為我假定
別人可能實現它。
現在，這是不會還來編譯。
我需要做什麼？
我需要的原型，記住了。
所以我需要在這裡有無效合唱團（int i）的。
>> 所以，現在，如果我去這裡 -
其實，讓我們用更大的窗口。
讓我們繼續前進，並合唱。
使用身份不明申報我。
哦，那是愚蠢的。
我們並不需要的參數。
我們只要做到這一點。
希望我們能有這樣開始。
這本來是一個更簡單的程序編寫。
這樣出現了。
現在，讓我們去到我的終端窗口，再次運行鐺。
在這裡，我們走了。
這是真快。
究竟剛發生時，有關係嗎？
好了，現在我將添加打印線，這樣我們就可以看到。
因此，讓我輸出，比方說，我在這裡。
好了，沒有變量，我們會留下這樣的。
讓我重新運行。
讓我重新運行合唱團。
。
繼續下去。
順便說一句，為什麼它沒有崩潰嗎？
分割故障發生前超級快。
[聽不清]
DAVID J.馬蘭：沒錯。
因此，它需要一定的時間來打印。
它只是需要更多的工作在計算機的一部分。
有。
分割故障。
>> 因此，發現是多麼快的程序運行。
如果你沒有打印任何東西，超級快。
但是，我們仍然得到了該段故障，因為發生了什麼事？
好吧，如果你認為您的計算機的內存，這
恰好是主要的。
但在這裡 -
我們只需要調用這個合唱之中，讓我們這個合唱團。
現在，如果我做我的美學，這只是說合唱，
合唱團，合唱團，合唱團，合唱團，合唱團，合唱團，廣告nauseum。
最終，會發生什麼呢？
如果大的畫面字面意思是這樣的，這是發生在概念上嗎？
該協議棧溢出堆。
更糟糕的是，你只是溢出的一切，包括文本段，這是
0和1代表你的程序。
總之，這僅僅是超級，超級壞。
對嗎？
你的程序已失去控制。
您使用的是比你打算一切都是因為一個愚蠢的方式更多的內存
錯誤，在這種情況下。
或者，在這種情況下，故意做的函數調用自己。
現在，這並不全是壞事。
調用自己的函數實際上擁有極大的權力
當你正確地使用它。
我還沒有正確地使用它在這裡。
>> 因此，這並不全是壞事。
但事實上，我從來沒有真正停止稱自己是一個基本的
這一方案的弱點在這裡。
那麼，我們要與所有這一切嗎？
那麼，到底發生了什麼？
當我打電話的增量功能，像我們所做的是在那些例子，
我有一個值，如1，我傳進去
我通過在副本的頭號。
因此，發生以下情況。
因此，讓進入的增量例子。
而且這傢伙就在這裡。
因此，這裡實際上發生了什麼。
當我打電話的增量，和我通過在X，形象地什麼
在這裡是這樣的 -
如果我有1的值保存在這裡，和其實我打電話增量，這
現在被稱為合唱團 -
是啊，把我關在這裡。
所以，讓我們把這個增量。
我們不知道這是什麼下一個功能將是。
那麼，什麼是實際發生的事情是這裡的某個地方，我有一個在主塊的
存儲器，存儲數字1。
當我打電話給增量，我使用其他的內存塊，但現在我
有副本1。
當我增加值，這將成為2 - 可怕的寫在
屏幕在這裡。
但後​​來，發生了什麼，盡快增加回報嗎？
內存只是被交還給操作系統，這意味著所有
你這樣做是沒有什麼用處。
實際上仍然是存在的，最初是包含在主。
>> 所以，我們要這個嗎？
好了，事實證明，在內存中，你有這個背靠背序列
字節，你可以把東西英寸
而事實證明，我們已經看到的東西，包括把
事情背靠背背靠背。
什麼是一個字符串，第一個星期，現在在本週二的基礎上嗎？
所以它只是一個字符集合。
因此，原來，就像你可以把數字在內存中，同樣你也可以
把字符在內存中。
一旦我們開始把字符在內存中背靠背
回來，事實證明，使用最簡單的事情，比如一個for循環
while循環中，我們可以遍歷 -
從左至右在字符串中的字符 -
開始按摩到完全不同的字符。
A可能變為B。有可能成為C.所以，最終，我們可以採取一個
英語句子，其實是有道理的，每個人轉換
一次一個步行通過我們的計算機的內存離開
實際上加密的權利。
>> 因此，讓我們在這裡，我們五分鐘的休息時間，當我們回來時，我們會
啟動這一進程的擾碼信息。
>> 好的。
所以，在我們深入到一些加密，這些東西稱為“陣列”，讓我
暫停任何問題，因為我覺得我是那種混亂的一些
這些議題。
所以現在，如果我們可以讓我們來解決。
所以，我們剛才講的返回值。
我們談論的論點。
我們談論這個概念，我們回來在週
來，這些堆積一大堆的查看內存
托盤，可以這麼說。
從底部上起來，使得每個托盤會在棧上代表
的功能，這是目前被調用。
有什麼問題嗎？
因此，如何對 - 讓我試著問了一個問題。
我一直在破壞，但現在it's - 地一下男孩的臉。
因此，我們將回來。
>> 因此，讓我在這裡問一個問題。
讓我簡化這回它是什麼之前，我們早期的Q＆A.
而事實上，增量左括號，INT數，關閉
括號內。
整數數字代表什麼？
[聽不清]
DAVID J.馬蘭的說法。
好了，但什麼是參數？
[聽不清]
DAVID J.馬蘭：對不起，那是什麼？
主講人3：你傳進去的東西
DAVID J.馬蘭：好吧。
所以，你傳進去的東西
更一般地，它僅僅是輸入。
如果你在生活中寫一個函數，該函數的目的是做
有點不同的東西，每次你使用它，那麼唯一的辦法
要做到這一點真的會似乎是為它提供輸入，所以它
可以做不同的事情，每次輸入。
>> 所以，你需要指定兩件事情，當一個函數需要輸入。
你需要指定你想給，輸入的名稱，純粹是為了
自己的方便，所以，你可以參考它的功能
自己寫作，我在這裡的第32行。
但是，你還需要指定它的類型，因為C是一種編程語言
只需要
如果你想要一個變量，你必須告訴計算機
數據類型是，
在很大程度上，以便它知道多少位
分配給該變量。
因為它可能是6 -
對不起，它不會是6。
它也可以是16。
它可以是8位。
它可以是32個，甚至64。
但是，計算機需要知道。
現在，在左邊的int代表著什麼，與此相反呢？
[聽不清]
DAVID J.馬蘭：那是什麼？
[聽不清]
DAVID J. MALAN：類型的函數，並更具體地，在
其輸出的類型。
右。
因此，而括號中的東西代表的輸入，如果有的話，
事情左邊表示其輸出端。
在這種情況下，增量顯然是返回一個int。
所以int是這個函數的返回類型。
>> 要返回的是什麼意思？
從字面上看，，使用關鍵字回報。
然後，如果你返回到正確的關鍵字是
整數，那麼這確實是符合我們所承諾的。
你不能做這樣的事情 -
你好，世界 -
因為這是一個字符串。
很明顯，這不是一個整數。
因此，在短，真的是對我們的負擔，程序員，具體為
我們回國，然後返回。
一點點，然後作出更明確的背景下 -
他又出來了。
背景 -
大驚喜，在短短的時刻。
這裡的背景是，現在是您的計算機的內存中，再次，
技嘉，2千兆字節，什麼都好。
也許是更重要的。
也許它的不足。
但電腦的看法有不同的部分。
出現下降。
別的東西。
不同的東西在中間。
今天，我們就開始講這個故事。
>> 但我們會回來到這個隨著時間的推移。
現在，唯一的一塊內存中，我們真正關心的是文本段
因為這只是代表了0和1
，鐺輸出。
所以，當你在鍵盤上像a.out的運行命令，或者雙擊
在Mac OS或Windows點擊一個圖標，你的程序從硬盤裝入
開車到RAM中。
它的屁股在您的計算機的RAM的頂部，可以這麼說。
同時，為您的程序開始運行，並在被稱為​​主
程序，你寫的程序微軟和蘋果寫道，任何其
局部變量結束了在那裡降落的底部，您的計算機的內存中。
但是，如果主本身調用另一個函數，變量或
參數，它們最終會在它的上面。
如果該函數調用的東西，他們最終在它上面，
在它上面，在它之上。
只有一次是執行不托盤堆疊，所以
說話，開始越來越低。
這是什麼話，概括地說，解釋了為什麼當你調用立方體 -
還是你打的增量 -
你在副本的價值傳遞。
是什麼意思形象地是，你從字面上寫
號1中的存儲器的另一部分，改變一個1至2，在箱子的
增量 -
或8，在多維數據集的情況下 -
然後投擲，內存只要增加或多維數據集
函數返回。
>> 問題。
[聽不清]
DAVID J.馬蘭：凡 - 全局變量中存儲的是什麼
目前被稱為初始化的數據和未初始化的數據。
區別在於，如果你有一個全局變量，並賦予它
立即等號的值，它結束了在頂部。
如果你只是說沒有價值的詮釋x分號，它最終小幅上漲
簡單地按照慣例，在RAM。
其他的問題。
好的。
>> 因此，這幅畫會回來的，因為我們變得更強大，我們能做些什麼
與計算機。
但現在，讓我們有一個簡短的介紹，特定類型的加密技術，
密碼學不解決世界上所有的問題，但沒有解決
其中的一些。
在這種情況下，在這裡，我們有一些所謂的密鑰加密。
密鑰加密，顧名思義，源於它的安全性
從一個秘密。
因此，舉例來說，如果你是在小學和你通過一個
小秘密情書的男孩或女孩，你破碎 - 如果你
想通過貫穿全場的，你可能不會寫
英語中的註釋，或任何你的母語，而是你
可以對它進行加密。
或者你可能只是給他們一個文本消息，這些天。
但你實際上可能會通過他們在教室。
而要做到這安全地，以這樣一種方式，您的朋友和教師
不知道你寫的東西，你可能會想出一個相當簡單的
算法 -
年輕人雖然你可能是 -
只是爭奪的話。
因此，而不是寫一個，你可能會寫B.而不是B，你可以寫
C.而不是C，你可能會寫D，等等。
或者，你能想出一個更複雜的字母翻譯
以不同的字母。
但美中不足的是男孩還是女孩，你發送此說明需要
知道的東西。
這是什麼，很明顯嗎？
一樣，你的秘密是什麼。
喜歡什麼，是AS和BS和CS和DS之間的映射？
難道僅僅是增加一個，可以這麼說，每一個字母去從
A到B，從B到C？
它是比這更複雜嗎？
所以，你和你的美眉需要有這個秘密的信息。
但有一個catch-22在這裡種。
如果這是第一次通過你這封情書
類的是男孩還是女孩，怎麼會知道這個秘密，甚至是嗎？
因此秘密密鑰加密並不能解決世界上所有的問題。
其實有關係，我們再回過頭來朝
學期結束。
>> 同樣，我們有沒有可能發送過 -
同樣，我們大多數人不知道的人的作品，例如，在
Amazon.com。
然而，我們很多人可能買的東西在Amazon.com。
我們一直被教導要承擔這些電子商務
交易是安全的。
對嗎？
HTTPS URL可能說。
有可能一個愚蠢的小掛鎖圖標的地方。
有某種形式的加密技術保護您的信用卡信息
你和亞馬遜（Amazon.com）之間。
然而，如果密碼學需要知道一些秘密，但我不
知道在亞馬遜的人，而且我肯定不會安排任何形式的
有人在亞馬遜的秘密，我的電腦或瀏覽器這樣做呢？
好了，原來有其他類型的加密技術完全解決
那樣的問題。
但是今天，我們將重點放在簡單的一個，在那裡你可以安排在
提前知道一些秘密，如加1或一些AS和BS之間的映射。
>> 和加密過程一般涉及這一點。
你有一些簡單的文字，描繪在左。
您可以運行它通過某種算法或過程
加密。
也許這只是一個變成了B，B變成C。然後你就結束了
密文。
同時，一旦你的美眉接收到的秘密紙條，他或她有那麼
一般扭轉這種算法，從而獲得進行解密
備份純文本。
現在有物理的化身。
舉例來說，這是一個小秘密的解碼器環。
這是在這個意義上，在這裡兩個錶盤的環。
在這件事情的外週，有字母A到Z，
雖然他們以隨機順序。
在裡面，有一些數字，例如，
戒指，你可以種翻在外面，但不是內部以排隊
數字與字母。
而在剪輯你將要看到的 - 其中有些你可能已經看到24/7
從一部電影叫聖誕故事在聖誕節前後。
你會看到那個小拉爾夫是如此渴望要弄清楚什麼的小孤兒
安妮的秘密是他的消息了溝通，我認為，在
數字信息串行中形成的。
你有積累的小卡片，來到
在麥片盒。
你必須郵寄他們。
你有秘密的解碼器環，所以，你終於可以圖
字母和數字之間的映射是什麼，
或字母和字母。
所以，我給你這個短片從一個聖誕節的故事，以激勵的pset 2
我們的討論，在某一時刻的數組。
所以在這裡我們拉爾夫。
>> [視頻回放]
無論是向所有人拉爾夫·帕克委任一個
的小孤兒安妮秘密圈的成員，並有權
榮譽和利益發生於此。
簽名，小孤兒安妮。
會簽，皮埃爾·安德烈！
在油墨中！
榮譽和利益，已經9歲。
來吧，讓我們用它。
我並不需要所有的爵士樂關於走私和海盜。
- 聽著明天晚上的結論冒險的黑色
海盜船。
現在，是時候為你的成員安妮的秘密消息
秘密圈。
請記住，孩子，只有安妮的秘密圈的成員可以解碼
安妮的秘密消息。
請記住，安妮得靠你了。
將你的腳B2。
這裡的消息。
12，11 -
我在我的第一個秘密的會議。
-14，11，18，16 -
皮埃爾是在今晚很大的發言權。
我可以告訴大家，今晚的消息是很重要的。
-3，25。
這是一個消息，安妮自己。
記住，千萬不要告訴任何人。
-90秒後，我在一個房間裡唯一的一個九歲的孩子
可以坐在隱私和解碼。
啊哈，B.我去到下一個。
E.第一個字是。
S.它現在更容易。
U.
哦，來吧，拉爾夫。
我得走了。
- 我是正確的，媽媽。
- 嘖嘖奇才。
-T，O.一定要。
要確保的是什麼？
小孤兒安妮想說的是什麼呢？
要確保的是什麼？
- 拉爾夫！
蘭迪得走了。
請你出來嗎？
好吧，馬。
我馬上就出來。
我越來越近了。
張力是可怕的。
它是什麼？
這個星球的命運懸而未決。
- 拉爾夫！
蘭迪得走了。
- 我就出來，哭出聲來。
哎呀，幾乎沒有。
我的手指飛了起來。
我的心是鋼的陷阱。
每一個毛孔振動。
這幾乎是清楚的。
是的，是的，是的，是的。
要確保喝阿華田。
阿華田？
照出的商業？
狗娘養的。
[END視頻播放]
>> DAVID J.馬蘭：因此，我們有加密技術。
因此，如何在一台計算機，我們可以去實現，或者
代表這樣的事情嗎？
好了，我們需要一種方式表達自己一點更靈活
因此，我們的變量不允許的。
我們已經有整數。
我們已經有個字符。
我們的花車和雙打和其他幾個人。
但是，這些都是個人的內存不真的讓我們
表達的東西，如單詞和句子和短語。
事實上，我們叫這樣的事情串。
但我們所承諾的，這是真的只是一個簡化的CS50
庫，我們打算剝離回來。
>> 讓我們開始做，在這裡。
讓我繼續前進，打開一個文件 -
所有這些文件都可以像往常一樣在網上 -
稱為array.c解決的問題無關字符串，但描繪一個
的圖片在這裡，我們怎麼可能使用的東西稱為數組。
數組是一種數據類型。
這是一個類型的變量，各種各樣的，有多個較小的數據類型
它裡面的背靠背背靠背。
因此，舉例來說，如果我們要編寫一個小程序，讓您的
測驗平均為一療程，有兩個小測驗，你可以很容易像50
編寫這個程序 - 甚至在一些上週的材料 -
通過調用getInt和一對夫婦的變量。
詮釋quiz1，詮釋quiz2，這是很簡單的。
這也許是10，20行的代碼，最大，實施程序，要求
兩個測驗的分數，然後計算它們的平均用戶通過將它們添加
在一起，除以二，然後打印結果。
我們或許可以做到這一點很容易現在，
有些分鐘數。
>> 但問題是，假設有50有三個測驗或4。
假設你想使用相同的程序，有一類
每週測驗。
想想一個類時，每週測驗。
如果有像在一個學期16週，現在你有16個變量 -
quiz1，詮釋quiz2，詮釋第quiz3，詮釋quiz4。
只要你開始看到這種冗餘，複製和粘貼
的代碼，它應該讓你希望有一個更好的辦法。
幸運的是，因為數組。
因此，讓我們做到這一點。
首先，讓我介紹一個非常簡單的事情，我們到目前為止還沒有使用，
但偶爾你會看到它的代碼。
這就是通常被稱為一個常數。
所以在這個意義上，這個值不會改變，它是一個常數。
創建一個常量時，是使用全部大寫的人的約定
字母，只是，使其真正站出來，在你的代碼。
特殊的關鍵字，您使用的C＃定義。
所以，如果你說的，然後是一個空格，然後你想使用這個詞，
常量的名稱，然後該常數的值。
因此，通知，這從一個變量分配的東西是不同的。
有沒有等號。
有沒有分號。
這是通常被稱為預處理器指令，但更多的
另一個時間。
>> 就目前而言，這將創建一個不變的值，稱為測驗的實際
的數值是2。
因此，任何地方，你看到測驗，測驗，測驗，這是整個文件
只是數字2。
現在，如果我看主要現在，讓我們來看看它是如何工作的。
起初，這看起來有點神秘。
但它是從第一個星期，所有的東西。
詢問用戶的等級。
如何才能做到這一點呢？
那麼，在第22行 -
這是真的的多汁的一部分 -
我聲明了一個浮動，但是不只是一個單一的浮動。
我聲明，而是一個浮點值數組。
這個變量將被稱為檔次，這裡暗示。
但唯一的一塊新的語法，那麼這些方括號中，其實
我已經說過了浮動等級，然後打開支架，然後一個數字。
請注意，如果這是一個常數，這是像我們這樣做。
這意味著哎電腦，給我兩個花車，讓我們共同呼籲
他們的成績。
這是更繁瑣的過程，這樣的對比。
浮法級1，浮動grade2“，等等。
因此，一個陣列，使我們能夠實現這個想法，但要少得多亂七八糟，在
這樣的方式，我們可以寫一行代碼，而不是，比方說，一個16 16
週的學期。
所以我不想硬編碼，因為，如果你認為現在
假設明年邏輯 - CS50更改為3，而不是測驗。
我有2號。
在這裡，我有2號。
它變得非常乏味，很容易搞砸了，不小心改變
一個值，錯過了一些其他值2。
所以我要這個距離，而不是抽象的，並使用此常量，其
顧名思義，永遠不會改變。
而現在，無論我們有不同的測驗今年或明年，我
只需要改變它在一個地方，在這裡頂部。
>> 所以這是所有不變的是。
同時，新概念的特點是一個數組。
因此，在方括號給我這麼多的花車，讓我集體
他們成績在這裡。
所以，現在讓我們來看看我會做什麼。
在這裡，在第24行是一個for循環的開始。
這實在是沒有任何幻想。
這只是使用測驗，而不是硬編碼的數字。
但也有是沒有從上週智力有不同的。
這僅僅是printf的。
因此我們知道printf（“小考數的％d％d”的），因為我只是想打印出來給我測驗
數之一，兩個，然後兩個兩個。
因此，這純粹是一種審美的東西。
但是，現在最有趣的部分是在第27行。
為了填補的兩個佔位符的浮點
值，你再使用方括號。
在這種情況下，我使用的是我，因為for循環已開始與我等於
什麼樣的價值，顯然是嗎？
0。
>> 因此，在這個循環的第一次迭代，這是因為雖然我
寫在代碼中。
但在這個循環中的第二次迭代，這是因為雖然我
寫在我的代碼。
但事實上，我使用一個變量是完美的，因為，正如其名
表明，它改變它的值在每次迭代。
所以我填充這個數組一個地方的時間。
陣列看看這是什麼樣的呢？
好了，我之所以得出這個超級簡單的屏幕上的矩形
之前是因為這個原因。
數組是另一塊內存的內存塊，
其次由另一個的內存塊，等等。
所以，如果我的數組大小​​為2，在這種情況下，在這裡，所有我會做的
打字在我測驗成績，喜歡上了這裡。
我就這一個。
然後，我得到了99就這一個。
該內存可能甚至沒有使用，因為我只問
電腦的數組大小​​為2。
這些廣場仍然存在。
對嗎？
你還有2 GB的RAM，即使你只
兩個浮點的要求。
因此，陣列背後的想法是，計算機只需要一個內存塊的
然後分給更小的碎片背靠背背靠背。
因此，這是所有的數組。
這是一個連續的內存塊，這裡面你可以把東西。
>> 現在發生這種情況，然後做一些無聊的算術。
如果我向下滾動在這裡，這是我然後遍歷數組中。
我拿出所有的數組中的值的總和。
然後，我在這裡使用ROUND函數實際做的
總結除以測驗。
但是，讓我揮揮手，作為足夠的算術現在的排序。
但是，所有為我做的最終計算平均值。
所以第一次測驗加第二個測驗，再除以2，然後打印
它作為一個int。
>> 但現在，讓我們叫字符串轉換到一個不同的例子，
它描繪了一個類似的畫面，但使用​​字符串。
讓我繼續前進，簡化這只是一個瞬間。
現在原諒縮進。
請注意，在這個例子中的第19行，我收到了來自用戶的字符串。
但是請注意，我在22日線下做。
實際上，我遍歷從我 - 這是一個新的伎倆 -
strlen的字符串的長度。
這是一個與C的功能，如果你傳遞一個字符串，它告訴
你有多少個字符在該字符串中。
這就是全部。
事實上，它是strlen的字符串的長度，而不是僅僅是因為它的
更加簡潔。
30年前，人們喜歡寫東西盡量簡潔。
因此，我們已經把該公約。
我+ +只是意味著我在每次迭代中增加。
而現在注意到這一點，這是非常有趣的。
因此，在第24行，我說電腦，給我一個字符，8
位，並稱之為C。
不過這到底是上右手邊說？
在英語中，什麼代表什麼呢？
[聽不清]
DAVID J.馬蘭：沒錯。
給我的第一個字符數組中的。
或更一般地，給我的陣列中的第i個字符。
意識到這是重要的，現在，計算機科學家，我們實際上
從0開始計數。
你不擁有自由裁量權，現在開始這樣做。
現在，你必須按照電腦的期望和行為
從0開始計算，因為[0]將是第一
字符串中的字符。
[1]將是第二個。
[2]將是第三個，等等。
所以，如果我編譯這個程序 - 這是，再次字符串。
>> 所以字符串。
現在，我在我的終端窗口中執行字符串。
它在等待輸入，所以我要輸入，就說，大衛。
輸入。
而現在它打印DAVID在不同線路上，因為
請注意我在做什麼。
我一次打印一個字符。
現在，我們將進入今天。
但我刪除了剛才在這裡檢查。
事實證明，如果用戶出現異常，對抗性的，或只是
混淆，實際上，你可以不給一些長度字符串。
如果你按錯鍵盤上的鍵，你可以給
沒有在所有的字符串。
或者，如果你是惡意的，你可以嘗試將其粘貼在一千兆字節的價值的
的文章，以填補這個字符串。
如果計算機運行內存，事實證明，我們將
這個特殊的值稱為空。
因此，就目前而言，只是知道有這個特殊的值稱為空
讓我們來檢查時，我們的記憶，在其他的事情。
>> 但是，如果我現在打開字符串，請注意區別就在這裡。
看到一個與字符串的區別就在這裡。
對於字符串，這個for循環是一個有點不同。
讓我刪除空值，這樣我們就可以談論其他時間的。
但是，什麼是不同的for循環？
我可以回到前面的例子。
所以這是第二版。
這是一個版本。
一，二，一兩個。
因此，strlen的電話是在哪裡呢？
這是在for循環的第一部分。
任何想法，為什麼我這樣做？
是啊。
[聽不清]
DAVID J.馬蘭：所以我們不會每一次調用該函數。
沒錯。
回想一下，他們是超級簡單的for循環，一旦你
明白，這是初始化，
條件，和更新。
的問題是，對每個條件發生
循環的迭代。
因此，在這個例子中，什麼是壞的事實
這是我的條件嗎？
你調用strlen再，再而三。
但是，一旦我輸入的國寶，該字符串的長度是5個。
它不會改變，因為在每次迭代循環
字符串仍然是D-A-V-I-D。所以這是一個暗示了這是怎麼回事成為
越來越重要思想的設計決策， - 只是不
使計算機做不必要的工作。
>> 現在，正如pset的，PSET 2標準版先睹為快
要挑戰你真正落實一定數量的密碼，一些
數的加密算法，這樣就可以加密和解密
秘密消息，就像一個拉爾夫解碼。
在黑客版的pset 2，我們要去遠一點。
我們將交給您的文件，其中包含一個實際的計算機系統
一大堆的用戶名和加密的密碼，和面臨的挑戰
為黑客版將是破解這些密碼和數字
出了什麼加密或什麼秘密被用於實際
產生這些密碼。
我們要做到這一點，使用一個新的功能，在這裡我給的C
你只是一個演示，被稱為命令行參數。
>> 因此，原來，你們有些人可能已經看到在部分或教科書中，
主並不總是括號中是無效的。
事實證明，主也可以這樣寫，有兩個參數，
argc和argv，argc是的話，你輸入後數
在命令行程序的名稱。
而argv是實際的話。
的方括號，顯然，argv是一個數組。
這將是一個字符串後的字符串後，內存中的字符串。
所以，我們要能夠做到的，開始的pset 2，
這樣的事情。
如果我argv1，這是一個例子，我們會回來（星期一）運行
，請注意，它似乎並沒有做任何事情。
它只是打印出自己的名字。
但是，如果我說再見類，請注意，這個方案顯然迭代
在每一個的話，在提示符下輸入。
和手段，我們將獲得用戶的話，
在提示符下輸入是通過改變為主，本週末開始，從int
主要（無效），INT主（ARGC ARGV）。
因此，將要出生的命令行參數。
而一旦你得到真正的成熟，你就可以寫
很迷幻的程序，如這一個在這裡，這超出
我們已經做了一些功能迄今為止，所有功能相當強大。
>> 因此，我們將離開這個在屏幕上。
我們星期一見。