[音樂播放] DOUG LLOYD:指針,我們在這裡。 這可能會 是最困難的話題 我們在這裡討論的CS50。 如果你讀過 關於指針什麼 之前,你可能會有點 恐嚇進入這部影片。 這是真的指針 不要讓你的能力 到也許搞砸了 當你很厲害 與變量和數據的工作, 並導致程序崩潰。 但他們實際上是非常有用的 他們讓我們一個真正偉大的方式 通過數據備份和 第四功能之間, 我們是否則無法做到。 還等什麼,我們真的 想在這裡做的是火車 你有很好的指針紀律,所以 你可以有效地使用指針 讓你的程序要好得多。 正如我所說的三分球給我們一個不同的 辦法函數之間傳遞數據。 現在,如果你還記得 較早的視頻,當 我們談論 變量的作用域,我提到 所有我們傳遞的數據 在C函數是按值傳遞。 我可能沒有使用的 看,我的意思有 是我們傳遞數據的副本。 當我們通過一個變量的函數, 我們沒有真正傳遞變量 的功能,對不對? 我們傳遞的一個副本 該數據的功能。 該函數做的事情會 並計算出一定的價值, 也許大家使用該值 當它給它回來。 有一個例外 這條規則按值傳遞的, 我們會回來的是什麼 有一點後來在這部影片。 如果我們用指針來代替 使用變量的, 或者使用替代的變量 本身或變量的副本, 我們現在可以通過周圍的變量 之間以不同的方式的功能。 這意味著,如果我們使 在一種功能的變化, 這一變化實際上會 在不同的功能的影響。 再次,這是一件 我們以前無法做到, 如果你曾經嘗試交換 在函數兩個變量的值, 你已經注意到了這個問題 排序攀升,對不對? 如果我們想交換的X和Y,和我們 他們通過一個叫交換功能, 該函數內部交換 變量做交換價值。 一變二,二變 ,但我們實際上並不 在原有的任何改變 功能,在呼叫者。 因為我們不能,我們只 與他們一起工作的副本。 隨著指針雖然,我們可以 實際上通過X和Y的一個函數。 這個函數可以做 一些與他們。 而那些變量的值 其實可以改變。 所以這是在相當長的變化 我們處理數據的能力。 在我們深入 三分球,我認為這是值得 花幾分鐘到 回到基礎在這裡。 同時你也可以看看如何 計算機存儲作品 因為這兩個科目會 實際上是非常相關的。 正如你可能知道, 您的計算機系統 你有一個硬盤驅動器或 也許是固態硬盤, 某種形式的文件存儲位置。 它通常某處 250千兆字節附近 也許到了幾個TB的現在。 而這也正是所有的 文件最終活, 即使您的計算機關閉 關閉,你可以將其重新打開 你會發現你的文件存在 再次當您重新啟動您的系統。 但是磁盤驅動器,像一個硬盤驅動器, 一個硬盤驅動器或固態硬盤,固態硬盤, 只是存儲空間。 我們實際上不能做任何與 該數據是在硬盤, 或固態驅動器。 為了真正改變 數據或移動它, 我們必須把它移到 RAM的隨機存取存儲器。 現在RAM,你有很多 少在您的計算機。 您可能有某處 512兆附近 如果你有一個舊的電腦, 到也許兩個,四個,八個,十六 甚至可能是一點點 此外,4GB的內存。 所以這是非常小,但是這 其中所有的易失性數據的存在。 這就是我們可以改變的事情。 但是,當我們把自己的電腦關閉, 所有在RAM中的數據被破壞。 所以這就是為什麼我們需要硬盤 對於它的更穩定的位置, 這樣它exists-它會 是真的不好,如果我們每次都 把我們的電腦關閉,每 在我們的系統文件被抹殺。 因此,我們的RAM裡面工作。 而每一次,我們正在談論的 內存,相當多,在CS50, 我們談論的RAM,而不是硬盤。 所以,當我們搬東西到內存中, 它佔用一定的空間。 所有的數據類型的 我們一直在與 採取了不同的 量的RAM空間。 所以,每次創建一個整數 可變的,四個字節的存儲器 被擱置在RAM中,所以你 可以與整數工作。 可以聲明整數, 改變它,為它分配 一個值10增加 由一個,等等等等。 所有需要發生在 RAM,你會得到四個字節 一起工作的每一個 整數創建的。 每個字符您 創建得到一個字節。 這就是空間到底有多少是 存儲一個字符需要的。 每個浮動,一個真正的 數,得到四個字節 除非它是一個雙 精度浮點 號,它可以讓你 有更精確或多個數字 小數點後 又不失精確, 它佔用八個字節的內存。 長期多頭,真正的大整數, 還佔用八個字節的內存。 有多少字節的內存 做字符串佔用? 好吧,讓我們把一根鋼釘這個問題 現在,但我們會回來的。 所以回到這一想法的內存 字節大小的單元的大數組。 這真的是這樣,它的 只是一個巨大的數組細胞, 就像任何其他的陣列 你熟悉和觀望, 除了每一個元素是一個字節寬。 就如同一個數組, 每個單元都有一個地址。 數組中的每個元素 有索引,並且我們 可以使用該索引做所謂的 陣列上隨機接入。 我們沒有開始在 數組的開始, 遍歷每個 其單個元件 找到我們所要尋找的。 我們只能說,我想要得到的 第十五元件或100元件。 而且你可以通過該號碼 並得到你要尋找的價值。 同樣每一個位置 在存儲器都有一個地址。 所以,你的記憶可能 是這個樣子。 這裡是一個非常小的大塊 存儲器,這是20個字節的存儲器。 前20個字節,因為我 地址有在底部 是0,1,2,3,依此 在一路攀升至19。 而當我宣布變量, 當我開始與他們合作, 該系統將要設置 我預留一些空間 在該存儲器中的工作 我的變量。 所以我可以說,炭c等於資本 H.什麼事情發生? 那麼該系統會 拋開對我來說一個字節。 在這種情況下,它選擇字節數目 四,在涉及到四個字節, 並且它要保存 在信中有大寫的H我。 如果我那麼說INT速度 極限等於65,這是 要預留4 記憶對我來說字節。 它是怎麼回事治療那些 四個字節作為一個單位 因為我們正在努力 用在這裡是一個整數。 而且它要存儲65在裡面。 現在已經我有點 告訴你有點騙人的, 對的,因為我們知道, 計算機二進制工作。 他們不明白 一定就是一個大寫的H是 或者什麼是65,他們只 懂二進制,零和的。 所以實際上是什麼 我們要存儲在那裡 是不是字母H和65號, 而是二進制表示法 物,它看起來 有點這樣的事情。 並且特別是在 整型變量的情況下, 它不會只是吐了進去, 它不會把它當作四位一體 字節塊必然, 它實際上是 把它當作四分之一的字節塊, 這可能會是這個樣子。 即使這不是 完全正確要么, 因為一種叫 字節排列順序,這我們不 要進入了,但 如果你好奇, 你可以少讀了 與大字節序。 但為了這個說法, 為了這個視頻, 讓我們姑且認為,在 事實上,如何在65號會 在代表 每個內存的系統上, 儘管這不是完全正確的。 但是,讓我們實際上只是獲得 去掉所有的二進制完全, 而只是想想為:H 65,這是一個容易得多 想想它像 ,作為一個人。 好吧,所以它似乎也可能是 有點亂了I've-我的系統 沒給我個字節5,6,7, 和圖8來存儲整數。 還有一個理由,同樣,這 我們不會進入的權利,但足夠了 我要說的是什麼 計算機在這裡做什麼 可能是它的一部分,一個很好的舉措。 給不給我的內存是 一定背靠背。 雖然它現在打算怎麼辦呢 如果我想獲得另一個字符串, 所謂的姓,我想 把勞合社在那裡。 我將需要添加1 性格,那每個字母的 將需要一個 字符,存儲器的一個字節。 所以,如果我可以把勞合社進入我的數組 這樣的我很不好走,對不對? 缺少了什麼? 請記住,每一個字符串我們的工作 用C語言結尾反斜杠零, 我們不能忽略,在這裡,無論是。 我們需要預留一個字節 內存來保存,所以我們 知道什麼時候我們的字符串已經結束。 所以,再一次這樣的安排 事物的方式 出現在內存中的威力 有點亂, 但它實際上是多麼的 大多數系統的設計。 要它們對齊的倍數 四,原因再次 我們並不需要 進入現在。 不過這一點,所以我只想說的 這三行代碼後, 這是記憶是什麼樣子。 如果我需要的存儲位置 4,8,和12來保存我的數據, 這是我的記憶是什麼樣子。 而就特別 迂腐這裡,當 我們談論的記憶 地址我們通常 這樣做使用十六進制符號。 那麼,我們為什麼不把所有這些 從十進制轉換為十六進制 只是因為這是一般 我們如何參考存儲器。 因此,而不是為0〜 19,我們有什麼是零 x零到零X1三種。 這些是20個字節的內存,我們 也或者我們正在尋找在這個圖片 就在這裡。 因此,所有的他這樣說,讓我們 從內存一步之遙了第二 和背部的指針。 這裡最重要的 事情要記住 當我們開始與指針的工作。 指針是什麼 不是一個地址了。 我會再次因為說出來 它是那麼重要, 一個指針是什麼 不是一個地址了。 指針是地址位置 在內存中的變量住。 知道它有望成為一個 稍微容易一些與他們合作。 另一件事我喜歡 這樣做是有排序 的圖表直觀代表什麼 發生與各行的代碼。 我們會做這樣的夫妻 在指針的時候, 當我們談論動態 內存分配也是如此。 因為我認為,這些圖 可以是特別有幫助。 所以,如果我說,例如,時int k 在我的代碼,發生了什麼事? 那麼什麼是主要發生在 我得到的內存預留給了我, 但我甚至不喜歡 想想這樣的,我 喜歡去想它像一個盒子。 我有一個盒子,它的 顏色為綠色,因為我 可以把整數綠框。 如果這是一個角色,我 可能有一個藍色的盒子。 但是,我總是說,如果我創建 一箱,可容納整數 該框為綠色。 我拿一個永久性標記 而我寫鉀對的這一邊。 所以,我有一個盒子叫做K, 到了我可以把整數。 所以當我說INT K,這是 在我的腦海會發生什麼。 如果我說k等於五,我在做什麼? 好吧,我把5 在框中,正確的。 這是非常簡單的,如果 我說INT K,創建一個盒子叫做K。 如果我說k等於5, 投入五成箱。 我希望這不是一個太大的飛躍。 這就是事情走 有趣的一點,雖然。 如果我說INT * PK,以及即使我不 知道這必然意味著, 這顯然是得到的東西 做的整數。 所以,我要色 這個盒子的綠色十歲上下, 我知道它有什麼 做的整數, 但它不是一個整數本身, 因為它是一個int明星。 有一些稍微 不同吧。 因此,一個整數的參與, 但除此之外,它的 從沒有太多不同 我們都在談論。 這是一個盒子,它有一個標籤, 它穿著標籤PK, 而且它能夠容納 INT明星,不管那些。 他們有事可做 與整數,清晰。 這裡的最後一行,雖然。 如果我說PK =&K,哇, 剛剛發生了什麼,對不對? 所以這個隨機數,看似隨意 數,被扔進了箱子那裡。 所有也就是說,是峰 得到k的地址。 所以我會繼續其中k內存裡, 其地址,其字節的地址。 我做的是我的話 該值就是我要去 把我的箱子叫做PK的內部。 而且,由於這些東西都是 指針,因為找 在像無×字符串 八零Ç7四八 兩個零可能 意義不大。 當我們通常想像的指針, 我們實際上這樣做的指針。 PK給我們的信息 我們需要找到K的內存​​。 因此,基本上峰中有一個箭頭。 如果我們走的長度 那個箭頭,想像 這件事情,你可以走,如果我們 沿箭頭的長度行走, 在該箭頭的最前端,我們 會發現在存儲器中的位置 其中k生活。 這真的很重要 因為一旦我們知道其中k生活, 我們可以開始與數據進行工作 裡面的內存位置。 雖然我們得到的蠅頭 有點超前了現在。 那麼,什麼是指針? 指針是它的一個數據項 值是一個存儲器地址。 這是零個八零的東西 怎麼回事,這是一個內存地址。 那是在存儲器中的位置。 和指針的類型 描述的那種 數據,你會發現在 該存儲器地址。 因此,有整型明星的部分權利。 如果我按照箭頭,它的 要帶領我的位置。 而那個位置,我 會發現有在我的例子, 是一個綠色的盒子。 這是一個整數,這就是我 會發現如果我去這個地址。 的數據類型 指針描述了 你會發現在這個內存地址。 因此,這裡的很酷的事情雖然。 指針允許我們傳遞 功能之間的變量。 而實際上傳遞變量 而不是通過他們的副本。 因為如果我們確切地知道在哪裡 在存儲器找到的變量, 我們並不需要作出的副本 它,我們可以去到那個位置 和與該可變工作。 因此,在本質指針排序 做出一個計算機環境 很多更像是真正的世界吧。 因此,這裡是一個比喻。 比方說,我有一個筆記本, 對了,這是充滿了筆記。 我希望你能更新。 你是一個函數, 更新注意事項,正確的。 在路上,我們一直 到目前為止的工作,有什麼 偏偏是你將採取我的筆記本, 你會去到複印店, 你會做的影印件 筆記本的每一頁。 你會離開我的筆記本背 我的辦公桌上時,你就大功告成了, 你會去交掉的東西在我的 筆記本電腦,過時或錯誤的, 然後你就會傳回 我施樂頁堆疊 這是我的筆記本電腦與副本 你做了它的變化。 在這一點上,它給我, 調用函數,作為呼叫者, 決定把你的筆記和 它們整合回我的筆記本電腦。 因此,有很多步驟 這裡涉及到了吧。 就像那豈不是更好 如果我只是說,哎,你 更新我的筆記本 我,交給你我的筆記本, 你拿的東西, 從字面上跨出來 並更新我的筆記在我的筆記本。 然後給我我的筆記本電腦了。 這是什麼樣的 指針允許我們這樣做, 他們做出這樣的環境中有很多 更像是我們如何運作的現實。 所有這樣的權利是什麼 一個指針,讓我們來談談 關於指針在C中是如何工作的,並 我們如何開始與他們合作。 所以這是一個非常簡單的指針 稱為C中的空指針。 空指針指向什麼。 這可能看起來像它的 其實不是一個非常有用的東西, 但正如我們將看到一個 過了一會兒上,其實 這個空指針存在 居然真的能派上用場。 每當你創建一個指針, 你不將其值設置立即─ 設置的一個例子 其價值立即 將一對夫婦滑回 在這裡我說的PK等於&K, PK獲得K公司的地址, 我們將看到這意味著什麼, 我們將看到如何編碼的shortly- 如果我們不將其值設置為某事 馬上有意義的, 你應該總是 設置你的指針指向空。 你應該把它設置為指向什麼。 這比很大的不同 正要離開的價值,因為它是 然後聲明 指針,只是假設 這是零,因為那是很少如此。 所以,你應該總是設置 一個指針的值 為空,如果你不將其值設置 立即有意義的事。 您可以檢查是否指針的值 為null使用等於運算符 (==),就像你比較任意整數 值或使用字符值(= =) 為好。 這是一種特殊的恆 值,你可以用它來測試。 所以這是一個非常簡單的 指針,空指針。 另一種方式來創建 一個指針是提取 一個變量的地址 你已經創建, 而你做到這一點使用的& 運營商地址提取。 對此我們已經先前看到的 在第一個圖的例子我發現。 因此,如果x是,我們的變量 已創建的整數類型, 然後&x是一個指向一個整數。 &X是 - 記住,和將要提取 的右邊的事情的地址。 並且由於一個指針只是一個地址, 比&x是一個指向整數 它的值就是在存儲器X的生活。 這是X的地址。 所以與x是x的地址。 讓我們這一步 進一步連接到一些東西 我暗示在一先前視頻。 如果ARR是double數組,然後 與改編括號我是一個指針 一個雙。 確定。 常用3方括號我,如果 ARR是雙打的陣列, 那麼常用3括號我是 該數組的第i個元素, 並與常用3方括號我就是在 存儲器改編的第i個元素的存在。 那麼,有什麼含義嗎? 一個數組名,寓意 這整個事情, 是,陣列的名稱是 其實本身就是一個指針。 你一直工作 與所有的指針沿著 每次你使用一個數組的時間。 還記得本例 可變範圍, 不久我目前的視頻結束 一個例子,我們有一個函數 所謂集合int和一個 函數調用集陣列。 而你的挑戰,以確定 無論是否,或什麼 我們打印出值 該函數結束, 在主程序的末尾。 如果從這個例子召回 或者,如果你看過視頻, 你知道你 - 在調用的時候 集INT有效地不執行任何操作。 但調用設置陣列一樣。 我幾分掩飾為什麼 這是在該時間的情況下。 我剛才說了,那麼它的一個數組,它的 特別的,你知道,有一個原因。 其原因是,陣列的 名字其實只是一個指針, 這裡面的這個特殊的 方括號語法 使事情很多更好的工作。 並且他們做的想法 指針少了很多恐嚇, 這就是為什麼他們排序 呈現的那樣。 但實際上數組只是指針。 這就是為什麼當我們 做出了改變到陣列, 當我們傳遞了一個數組作為參數 到函數或作為參數 陣列的一個功能時,內容 在這兩個被叫方實際改變 並且在調用者。 這對於所有其他類型的 我們看到變量,情況並非如此。 所以,這只是要保持 當你使用指針介意, 是,一個名 數組實際上是一個指針 該陣列的第一個元素。 OK,現在我們有所有這些 事實,讓我們繼續前進吧。 我們為什麼要關心 其中,一些住。 那麼就像我說的,這是相當 要知道一些有用的生活 所以你可以去那裡並改變它。 使用它,實際上 有件事,你 要做到這個變量生效, 而不是採取一些它的複印效果。 這被稱為間接引用。 我們去參考和 我們改變價值在那裡。 因此,如果我們有一個指針,它被稱為 電腦,它指向一個字符, 那麼我們可以說,* PC和* PC是 什麼,我們會發現,如果我們去的名字 到的地址的PC。 我們會發現有一個字符, * PC是我們參考的數據,在該 位置。 因此,我們可以這樣說: * PC = D或類似的東西, 這意味著,無論 在內存地址的電腦, 無論角色是以前 在那裡,現在是研發,如果說* PC = D。 所以在這裡,我們又來了與 一些怪異的Ç的東西,對吧。 因此,我們已經看到了*以前作為 莫名其妙的數據類型的一部分​​, 而現在它在被使用 一個稍微不同的上下文 在一個位置,以訪問數據。 我知道這是一個有點混亂, 這實際上是這個整體的一部分 喜歡,為什麼指針有這個神話 他們周圍的是如此複雜, 是那種語法問題,說實話。 但*用在這兩種情況下, 既作為類型名稱的一部分, 我們會看到一個小 後來別的東西。 而現在是 引用操作。 如此這般到參考, 它訪問數據 在指針的位置,並 可以讓你隨意操縱它。 現在,這是非常相似的 訪問你的鄰居吧。 如果你知道你的 鄰居的生活,你 未掛出與你的鄰居。 你知道你恰巧 知道他們住在哪裡, 但是,這並不意味著,通過 憑藉具有知識 你與他們的互動。 如果你想與他們進行互動, 你必須去他們家, 你必須去他們住的地方。 一旦你做到這一點, 那麼你可以互動 他們就像你想要。 而同樣有變數, 你需要去他們的地址 如果你想交互他們, 你不能只知道地址。 而你去這個地址的方法是 使用*,則引用操作。 你覺得會發生 如果我們試圖和反引用 一個指針,它的值是空? 回想一下,空 指針指向什麼。 所以,如果你嘗試取消引用 沒事還是去到一個地址什麼都沒有, 你覺得會發生什麼? 那麼,如果你猜分割 故障,你是對的。 如果您嘗試取消引用 一個空指針, 你受苦分割 故障。別急, 我沒有告訴你, 如果你不打算 設置你的價值你 指針到一些有意義的事情, 你應該設置為null? 我沒有和實際的分割 故障是怎麼樣的一個很好的行為。 你有沒有聲明的變量和 沒有立即指派它的價值? 所以,你剛才說INT X;你不 實際上它分配給什麼 再後來就在你的代碼, 你打印出x的值, 有還是沒有 其分配到任何東西。 你經常會得到 零,但有時你 可能會得到一些隨機數,並 你不知道它是從哪裡來的。 同樣的事情可以 發生在三分球。 在聲明指針 INT * PK為例, 你不將它分配一個值, 你得到四個字節的內存。 任何四個字節的 存儲器系統可以 發現有一些有意義的價值。 還有可能是 已經存在的東西了 不再需要由另一 功能,所以你只要有 不管數據在那裡。 如果你試圖做提領 你沒有 - 也有一些地址 已經字節和信息 在那裡,這是現在在你的指針。 如果您嘗試取消引用該指針, 你可能會和一些內存來搞亂 你不打算 惹這一切。 而事實上,你可以做 一些真正毀滅性的, 像打破另一個程序, 或打破另一項功能, 或者做一些惡意的 你不打算做的。 所以這就是為什麼它是 實際上是一個好主意 設置你的指針,如果你為null 不要將它們設置為有意義的事。 它可能會更好的 當天的程序結束 崩潰,然後為它做 一些螺絲了 另一個程序或其他功能。 這種行為很可能是連 不僅僅是崩潰不太理想。 所以這就是為什麼它是 實際上是一個好習慣 進入設置你的指針 為空,如果你不將它們 一個有意義的值 馬上,你知道的值 並且您可以安全地取消引用。 現在讓我們再來看一看 在整體局勢的語法。 如果我說INT * P;,你有什麼我剛才做了什麼? 我所做的就是這一點。 我知道p的值是一個地址 因為所有指針都只是 地址。 我可以提領p 使用*運算符。 在這方面這裡,在最 頂部召回*是類型的一部分​​。 為int *是數據類型。 但我可以提領 p使用*運營商, 如果我這樣做,如果我去這個地址, 什麼都會,我覺得在這個地址? 我會找到一個整數。 因此,為int * p是基本 話說,p是一個地址。 我可以取消引用p和當 我這樣做,我會找到一個整數 在該存儲器位置。 行,所以我說還有一個 惱人的事情與明星 而這裡的地方了 可氣的星星是。 你有沒有試過聲明 相同類型的多個變量 在相同的代碼行? 因此,對於第二,假裝線, 我的代碼實際上有綠色 是不存在的,它只是說:INT X,Y,Z ;. 什麼,會做實際創建是 為你三個整數變量, 一個叫X,一個叫 y和一個叫ž。 這是一個辦法做到這一點不 不必分割成三行。 這裡就是星星得 再煩人不過, 因為*實際上是部分 兩者的類型名稱和部分 變量名。 所以,如果我說INT * PX,PY,PZ,我 實際上得到的是一個指向整數 所謂PX和兩個整數,PY和PZ。 而這可能不是什麼 我們希望,這並不好。 所以,如果我想創建多個指針 相同類型的在同一行上, 和星星,我真的需要 做的是說INT * PA,* PB,* PC。 現在剛剛說, 現在告訴你這個, 你可能永遠不會做到這一點。 它可能是一個好東西說實話, 因為您可能會在不經意間 省略明星,類似的東西。 這可能是最好的,也許聲明 個別行的指針, 但它只是一個又一個 那些煩人的語法 星星東西,使 三分球這麼難的工作。 因為它只是這個語法 惹你有工作,通過。 通過練習它 真正成為第二天性。 我仍然犯錯誤它仍然 編程後10年, 所以不要生氣,如果有事 給你,這是很常見的誠實。 這是一種真正的 語法的缺陷。 樣的行,所以我答應 我們會重新審視 如何大的概念,是一個字符串。 那麼,如果我告訴你,一個 字符串,我們真的有種 在騙你的全部時間。 有沒有所謂的數據類型 字符串,而事實上我 在一提到這個我們 最早的視頻數據類型, 該字符串是一個數據類型 在CS50.h.為您創建 你必須#包括 CS50.h以便使用它。 那麼字符串真的只是 別名的東西 所謂的字符*,一 指針指向字符。 好了三分球,召回, 只是解決了。 那麼,什麼是大小 在一個字符串的字節? 那麼它的四個或八個。 而我之所以這麼說四 八成是因為實際上它 取決於系統,如果你使用 CS50 IDE,字符*是一個字符的大小 *是8,它是一個64位的系統。 在內存中的每個地址是64位長。 如果您使用的是CS50家電 或使用任何32位機, 你聽說過這個詞32位 機,什麼是32位機? 那麼它只是意味著每 在存儲器地址是32位長。 因此32位是四個字節。 所以,一個char *為四個或八個 根據你的系統字節。 實際上,任何數據類型, 的指針和指向的任何數據 類型,因為所有指針都只是 地址,是四個或八個字節。 因此,讓我們重新審視這個 圖,讓我們得出結論: 該視頻在這裡一點點的鍛煉。 因此,這裡是我們離開了與圖 在視頻的開始。 那麼現在會發生什麼,如果我說* PK = 35? 所以,這是什麼意思,當我說,* PK = 35? 拿第二。 *峰。 在這裡背景下,*是 引用操作。 因此,當提領 操作者的情況下, 我們去的地址指向 通過PK,我們改變我們發現。 因此,* PK = 35有效 這樣做是為了在照片。 因此,它基本上是語法 相同的具有所述k = 35。 一個。 如果我說INT男,創建 一個稱為M的新變量。 一個新的盒子,這是因為一個綠色的盒子 它會舉行一個整數, 和它的標記微米。 如果我說M = 4,我把 整裝進盒子。 如果說PK =&M,怎麼做 此圖的變化? PK =&M,你還記得什麼 與操作者或者叫什麼名字? 請記住,與一些變量名 是變量名的地址。 所以,我們在說什麼是 PK得到m的地址。 所以,有效地會發生什麼 圖是pk的不再指向 以K,但點到m。 此外指針是非常 棘手一起工作 他們採取了很多 實踐中,但因為 他們的能力,讓您 傳遞函數之間的數據 居然有那些 更改生效, 圍繞讓你的頭 是非常重要的。 這可能是最複雜 主題中,我們在CS50討論, 但值你 使用指針獲得 遠遠超過了並發症 這來自於學習他們。 所以,我希望你最好的 運氣了解指針。 我是道格·勞埃德,這是CS50。