[รูปแบบดนตรี] ลำโพง 1: สวัสดีครับทุกคน ยินดีต้อนรับกลับไปยังส่วน น่ารักวันแทนดูซึ่งเป็นเหตุผลที่ฉัน ตรวจสอบว่ามีเพียงสี่ของคุณมาที่นี่ และไม่แพ็คตามปกติของเรา ฉันได้รับการป่วยวันหยุดสุดสัปดาห์นี้ ดังนั้นผมจึงไม่ได้มีการดาวกระจายสำหรับพวกคุณ และผมอาจจะเริ่มมีอาการไอ ชะมัดตลอดนี้ ดังนั้นเพียงแค่อดทนกับฉัน ฉันจะพยายามจริงๆ และได้รับผ่านทางนี้เป็นครั้งแรก แต่ก่อนที่จะมีการโจมตีไอ แต่เพียงเป็นเรื่องง่ายกับฉัน เล็ก ๆ น้อย ๆ bit-- นั่นคือทั้งหมดที่ฉันขอ ดังนั้นวาระการประชุมของเราสำหรับ today-- เพียง reminder-- คำถามของคุณในสัปดาห์หน้า ผมบอกคุณเมื่อสัปดาห์ที่แล้วนี้จึง จะไม่ติดต่อคุณปิดป้องกัน ดังนั้นฉันเตือนให้คุณอีกครั้ง สัปดาห์ถัดไปของการทดสอบของคุณ ไปสิ้นสุดที่สัปดาห์ถัดไป ส่วนจะมากขึ้น เเล้ผมจะพยายามและการทำงานในการตรวจสอบบางอย่าง ดังนั้นถ้าพวกคุณจะทำได้ ช่วยให้ฉันออกโดยการส่งฉัน สิ่งที่คุณพอใจ กับที่คุณกังวลเกี่ยวกับ หัวข้อที่คุณต้องการสำหรับ ฉันจะครอบคลุมที่ต้องการจะดี ดังนั้นผมสามารถลองและการทำงานของพวกเขา ในส่วนของเราในสัปดาห์หน้า หรือส่งคุณวัสดุพิเศษหรือเตรียม ที่คุณอาจไม่ได้รับที่อื่น ๆ ใช่! คนอื่นจะมา! ผมคิดว่าผมทำที่ผ่านมาไม่ดี สัปดาห์ที่ไม่มีใครอยากที่จะกลับมา? ฉันกลัว ดังนั้นอีกสามสิ่ง ที่เรากำลังจะไปมากกว่า มีการเปลี่ยนเส้นทางแฟ้ม I / O และ แล้วชี้และหน่วยความจำแบบไดนามิก ฉันแน่ใจว่าคุณกำลังทั้งหมดสุดตื่นเต้นเกี่ยวกับ pointers-- หัวข้อที่ชื่นชอบของทุกคน เพื่อให้ง่ายต่อการทำความเข้าใจ ผมมั่นใจว่าพวกคุณทุกคนมีที่ใช่มั้ย? ดังนั้นสิ่งแรกที่แรก redirection-- นี้เป็นเพียงวิธีการ ในการควบคุมวิธีการที่คุณใส่ สิ่งที่เป็นโปรแกรมของคุณ วิธีการที่คุณสิ่งที่เอาท์พุทจากโปรแกรมของคุณ วิธีหลักที่คุณผู้ชาย ได้รับการมีปฏิสัมพันธ์กับมัน เป็นเพียงผ่านการออกมาตรฐาน ด้วยหน้าจอการพิมพ์ของคุณที่นี่ แต่มีวิธีการที่จะ pipe-- ที่เราเห็นที่นี่ เป็นหนึ่งในชนิดคำสวยของเรา ของท่อว่าข้อมูล หรือข้อมูลเป็นไฟล์จากไฟล์ที่ มันเป็นวิธีการที่แตกต่างกันเพียง ได้รับสิ่งที่เข้ามาในโปรแกรมของคุณ และออกจากโปรแกรมของคุณแทน เพียงแค่พิมพ์พวกเขาไปยังหน้าจอนี้ หรือสิ่งที่ป้อน จากบรรทัดคำสั่ง ดังนั้นคนแรกคือเล็ก ๆ น้อย ๆ มากกว่าตก ดังนั้น output-- มันก็พิมพ์เอาท์พุท ไฟล์แทนหน้าจอของคุณ ดังนั้นถ้าคุณมีอะไรบางอย่างที่พิมพ์ "สวัสดีชาวโลก" ไปที่หน้าจอ, ถ้าคุณใส่มันแทน เพื่อ output.text ที่ สร้างแฟ้มที่เรียกว่า output.text นี้ และเมื่อคุณเปิดมันก็จะ บอกว่า "สวัสดีชาวโลก!" ในนั้น นี้จะมีประโยชน์สุด ถ้าคุณมีตันของข้อผิดพลาด จริงอย่างที่เราเห็นในนี้ ถ้าคุณทำสองตกก็จะ พิมพ์ข้อความผิดพลาด ดังนั้นหากคุณกำลังมีปัญหากับ รวบรวมมันมีจำนวนมากของข้อผิดพลาด และคุณได้รับจมลงในความพยายามที่ เพื่อเลื่อนไปในบรรทัดคำสั่งของคุณ ผ่านทุกพวกเขาที่คุณสามารถ เพียงแค่พิมพ์พวกเขาไปยังแฟ้ม เปิดแฟ้มเพื่อที่ว่าคุณ สามารถเลื่อนได้ง่ายขึ้น ที่จริงผมใช้ว่า จำนวนมากเมื่อผมแก้จุดบกพร่อง 181 psets ของฉันสำหรับการเรียนรู้ของเครื่องจักร ดังนั้นมันจะมีประโยชน์สุดในภายหลัง นอกจากนี้ยังเป็นประโยชน์ในกรณีที่คุณมีโปรแกรม ว่าอาจจะมีการสร้างห้องสมุด หรือการสร้างชุดบาง ของสตริงและคุณ จะต้องสามารถที่จะเห็นว่า มันสร้างได้อย่างถูกต้อง นี่คือวิธีการที่จะทำเช่นนั้น ดังนั้นถ้าคุณพิมพ์พวกเขาไปยังแฟ้มคุณ ได้ง่ายขึ้นสามารถตรวจสอบพวกเขาใช่มั้ย? เมื่อเทียบกับความพยายามที่จะเลื่อน ผ่านบรรทัดคำสั่งของคุณ และแล้วสิ่งหนึ่งที่จะต้องทราบ เป็นที่ที่มีเพียงมากขึ้น กว่าตก, ถ้าคุณเขียน ไปยังไฟล์ที่ exists-- แล้ว ดังนั้นเช่นถ้าเราวิ่งเป็นครั้งแรกนี้ เวลาที่เรานำไป output.text, แล้วเรามีโปรแกรมที่สอง ที่พิมพ์นี้เป็นโปรแกรมสอง และทำมากกว่าที่จะ output.text, มันจะเขียนทับ that-- ดังนั้น เขียนทับสิ่งที่เคยอยู่ใน ไฟล์ที่จะเริ่มต้นกับที่ ดังนั้นถ้าคุณต้องการที่จะผนวก ไปยังไฟล์ที่เราเห็นที่นี่ คุณเพียงแค่ทำสองมากกว่าสัญญาณ และมันจะผนวกกับมัน มันจะไม่เขียนทับ ดังนั้นหากคุณต้องการที่จะทำงานหลาย ๆ โปรแกรมและชนิดของให้ ติดตามสิ่งที่ทั้งหมดของพวกเขา กลับมาให้คุณในแฟ้ม นั่นคือวิธีที่จะทำมัน ถ้าคุณไม่สนใจสิ่งที่อยู่ในไฟล์ของคุณ และจะได้รับอนุญาตให้ถูกเขียนทับ คุณก็สามารถใช้มากขึ้นกว่าเดียว ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ ผู้ชม: เช่นเดียวกับจุดเฉือนสวัสดีมากขึ้น กว่าข้อความจุดเอาท์พุทเช่นเดียวกับครั้งที่สอง มันจะเพียงแสดงบนเอาท์พุท จุดข้อความ time-- ที่สอง ลำโพง 1: ขวา ดังนั้นมันจะเป็นเพียงสมบูรณ์ เขียนทับสิ่งที่อยู่ที่นั่นจะเริ่มต้นด้วย ถ้าไฟล์นี้ที่นี่ output.text แล้ว มีอยู่โดยทั่วไปสิ่งที่คุณเรียก อีกครั้งกับซิงเกิ้ลมากขึ้น กว่าที่คุณเพียงแค่สามารถคิดว่ามัน เหมือนมันถูกแทนที่ด้วยไฟล์ เช่นเมื่อคุณประหยัดคำ เอกสารและคุณจะบันทึกเป็น และคุณใช้ชื่อเดียวกันและ มันสมบูรณ์เขียนทับพูดไป นี่คือการเรียงกันของสิ่ง ใครมีคำถามใด ๆ เกี่ยวกับการ เพียงแค่แสดงผลไปยังไฟล์? น่ากลัว ดังนั้นเห็นได้ชัดถ้าคุณย้อนกลับ ทิศทางที่ลูกศรที่สามารถทำข้อมูล ดังนั้นเมื่อพวกคุณมี เช่นซีซาร์หรือ VISIONEER และคุณมีบางสิ่งบางอย่างเข้า คุณมีอาร์กิวเมนต์บรรทัดคำสั่ง ที่จริงใส่มัน นี่คือวิธีการที่จะทำเช่นนั้นอีก ดังนั้นแทนที่จะรอ สำหรับจอพร้อมรับคำสั่ง เช่นเมื่อคุณถามหาคุณ ข้อความในซีซาร์หรือ VISIONEER, ถ้าคุณมีไฟล์ข้อความ ที่มีข้อความของคุณ คุณก็สามารถพิมพ์ลงที่ ดังนั้นถ้านี้เป็นเหมือนจุดเฉือนซีซาร์ 3 น้อยกว่าป้อนข้อความลูกศรซึ่ง คือข้อความของคุณที่ จะทำงานได้ดี เมื่อโปรแกรมซีซาร์ของคุณจริง ขอข้อมูลจากผู้ใช้ แล้วมันจะมีมันเพราะ คุณได้พิมพ์ลงในไฟล์นี้ นั่นเป็นเพียงวิธีการอื่น เพียงแค่ย้อนกลับของ output-- ใส่เพียงข้อมูลของคุณ แล้วสุดท้ายคือท่อ ดังนั้นเย็นสวยหนึ่งนี้ เพราะมันช่วยให้คุณสามารถ จะออกของหนึ่ง โปรแกรมและนำไปใช้เป็น การป้อนข้อมูลไปยังโปรแกรมอื่น ผมไม่ทราบว่าถ้าใด ๆ ของคุณ เล่นกับถอดรหัส CS50 ที่อาจมี ให้คุณ แต่มันจะ ช่วยให้คุณสามารถเก็บตัวอย่างบางส่วน ไฟล์พิมพ์ลงในการเข้ารหัสของคุณ แล้วจากนั้นพิมพ์ ที่เป็นถอดรหัสของคุณ เพื่อให้แน่ใจว่ามันปรากฏออกมาเหมือนกัน ดังนั้นจึงเป็นชนิดเช่นวงสามทาง ไปมัน ผู้ชม: ถ้าโปรแกรม มีปัจจัยหลาย จะมีวิธีการบอกว่าการทำงานของสัญญาณ ที่จะใช้แฟ้มข้อความหรือส่งออกหรือไม่? ลำโพง 1: มันมีหลายปัจจัย สิ่งที่ยื่น input-- ของคุณเมื่อมัน ขอใส่เป็นครั้งแรกที่มัน จะสมมติผมคิดว่ามันเป็น จะท่อในไฟล์ทั้งหมด ดังนั้นถ้าคุณมีปัจจัยหลายคุณ จะได้รับการท่อในหลายไฟล์ ดังนั้นถ้าคุณกำลังขอให้สำหรับข้อความ สามครั้งในรหัสของคุณ คุณกำลังจะได้รับการวาง ในสามไฟล์ที่แตกต่างกัน และจะได้รับบ้า และคุณไม่ควรจะต้อง กังวลเกี่ยวกับว่าตอนนี้ แต่นั่นเป็นความคิดที่ เพื่อใช่เป็นเพียงท่อส่งออกของหนึ่ง โปรแกรมใช้ใส่ลงไปในที่อื่น ๆ ทุกคนที่ดีมี? เย็น ตกลง คุณอาจจะไม่ต้อง ที่จะทำมากเกินไปกับมัน แต่คุณควรจะเข้าใจ วิธีที่คุณสามารถใช้นี้ และมีบางกรณีที่ คุณอาจต้องการที่จะใช้มัน ดังนั้นไฟล์ I / O-- ฉันรู้ว่าสิ่งที่คุณกำลัง saying-- เรากำลังใช้ในการอ่านจาก และการเขียนไปยังหน้าจอของเราที่นั่น ซึ่งเป็นมาตรฐานในการออกมาตรฐานและ และนั่นคือสิ่งที่พวกคุณได้รับ ทำตั้งแต่จุดเริ่มต้นของการเรียนที่นี่ แต่คุณยังสามารถอ่านและเขียนไฟล์ ซึ่งเป็นไฟล์ I / O-- เพื่อยื่นเข้า เอาท์พุทคือทั้งหมดที่มันยืนสำหรับ ดังนั้นนี้โดยทั่วไปหมายถึง คุณสามารถจัดเก็บข้อมูลของคุณตอนนี้ เมื่อคุณเพียงแค่พิมพ์ไปยัง หน้าจอมันหายไปโดยทั่วไปใช่มั้ย? ทันทีที่คุณทำ "สวัสดี โลก "และเรียก" สวัสดีชาวโลก " มันพิมพ์ "สวัสดีชาวโลก" ไปที่หน้าจอ แต่คุณไม่สามารถทำจริงๆ อะไรกับมันจากที่นั่น ถ้าคุณเก็บไว้ในข้อความ ไฟล์แล้วก็ คุณมีข้อมูลที่คุณได้รับอนุญาตนี้ ที่จะจัดการหรือใส่ลงในแฟ้ม หรือวางไว้ในโปรแกรมในภายหลัง เหตุผลหนึ่งที่ ทำไมเราทำเช่นนี้เป็นเพียง เป็นวิธีการจัดเก็บข้อมูลเพื่อใช้ในภายหลัง ฉันมีสองขั้นตอนที่นี่ เพียงแค่เดินผ่านมาตรฐาน I / O ในขั้นตอนที่หนึ่งคุณ จำเป็นที่จะต้องสร้างการอ้างอิง ไปยังไฟล์ที่มีทั้งหมด แคปไฟล์ดาว เพื่อที่จะสร้างตัวชี้ไปยังแฟ้ม ดังนั้นแล้วคุณต้องการที่จะเปิดมัน คุณจะพูดว่าตัวอักษร ไฟล์เพียงแค่เท่ากับ fopen และนี้จะกลับมา ตัวชี้ไปยังไฟล์ที่คุณเพิ่งเปิด ผมเห็นคู่ของคุณ คนที่เวลาทำงาน แต่สิ่งหนึ่งที่ เป็นตัวชี้ remember-- สามารถเป็นที่อยู่บางส่วนหรือโมฆะใช่มั้ย? ถ้าเราเคยมีกรณีที่ สิ่งที่สามารถกลับโมฆะ สิ่งที่เราต้องทำ ก่อนที่เราเคยใช้มันได้หรือไม่ เราจำเป็นต้องตรวจสอบว่า เป็นโมฆะหรือไม่ได้ใช่มั้ย? เพราะบางท่านอาจจะมี ปัญหาที่สิ่งที่วัตถุ ถูกกลับมาในการแหกคุกเป็นโมฆะ คุณพยายามที่จะดำเนินการ ฟังก์ชั่นบางอย่างกับมัน และทางเว็บไซต์คอมพิวเตอร์ของคุณโทษฐาน ใช่มั้ย? ฉันเดิมพันที่คู่ของคุณ อาจจะมีปัญหาที่ ดังนั้นด้วย fopen, fopen อาจจะ กลับชี้ไปยังแฟ้ม หรือถ้าอะไรผิดพลาด มันจะกลับมาเป็นโมฆะ ดังนั้นคุณจึงจำเป็นต้องตรวจสอบ ว่ามันไม่ได้กลับ null ก่อนที่คุณจะพยายามที่จะทำอะไรอย่างอื่น นี้เป็นเหมือนกรอบมาตรฐาน ที่คุณจะต้องที่นี่ ถ้ามีเคยมีโอกาสที่ บางสิ่งบางอย่างจะกลับมาเป็นโมฆะ ตรวจสอบเพื่อให้แน่ใจว่า ไม่ได้ก่อนที่จะดำเนินการต่อไป มิฉะนั้นคุณจะ ที่จะได้รับความผิดเว็บไซต์ที่น่ารัก และไม่มีใครชอบที่จะจัดการกับคนเหล่านั้น ดังนั้นในขณะที่เราเห็นที่นี่, อาร์กิวเมนต์แรก เป็นเพียงเส้นทางไปยังแฟ้ม หากไฟล์ที่ไม่ได้อยู่ มันจะสร้างไฟล์ที่ และมันก็จะมีช่องว่าง แล้วอาร์กิวเมนต์ที่สอง เป็นโหมดที่คุณต้องการ เราต้องการที่จะอ่านจากแฟ้มนี้หรือไม่? คุณต้องการที่จะเขียนจากมันได้หรือไม่ คุณต้องการที่จะผนวก? ดังนั้นจริง ๆ แล้วสิ่งที่ฉัน said-- ถ้าไฟล์ไม่อยู่ และคุณกำลังพยายามที่จะอ่านจาก มันก็จะโยนความผิดพลาด ถ้าแฟ้ม name-- ชอบถ้า file.text ยังไม่ปรากฏอยู่ และคุณต้องการที่จะเขียน มันก็จะสร้าง แฟ้มว่างเปล่าที่เรียกว่า file.text สำหรับคุณ และถ้าคุณต้องการที่จะผนวก คุณควรจะทำในสิ่งเดียวกัน ที่ทำให้รู้สึก? ถ้าคุณกำลังพยายามที่จะอ่านจาก ไฟล์ที่ไม่มีอยู่เลย ก็จะโยนความผิดพลาด มิฉะนั้นมันจะสร้างไฟล์ เพื่อให้คุณทำในสิ่งที่คุณต้องการมัน เย็น ตอนนี้เราสามารถอ่านจากแฟ้ม และนี่เป็นเพียงชนิดของไป ผ่านฟังก์ชั่นที่แตกต่างกัน ที่เรามีสำหรับแฟ้ม I / O นี้จะ มีความจำเป็นใน pset สัปดาห์นี้ ถ้าผมจำไม่ผิด ใช่มันอย่างจะเป็น ที่จำเป็นใน pset สัปดาห์นี้ ดังนั้นผลตอบแทน fgetc ตัวอักษรถัดไป fgets เพียงแค่ผลตอบแทนที่บรรทัดของข้อความ มันจะเกิดสิ่งใดขึ้นไป บรรทัดใหม่และมันจะทำลาย ดังนั้น fread อ่านบางอย่าง จำนวนไบต์และสถานที่ที่พวกเขา เป็น array ซึ่ง เป็นสิ่งที่คุณอาจจะ ต้องการที่จะทำอย่างไรกับอีก size-- อาจเป็นประโยชน์ กี่คนที่ได้อ่าน ข้อมูลจำเพาะ pset โดยวิธีการ? ตกลง [ไม่ได้ยิน] ลำโพง 1: ตกลง สิทธิ์ทั้งหมด แน่นอนอ่าน that-- มัน pset สนุก คุณจะได้รับการกู้คืนหน่วยความจำที่ถูกลบ card-- ที่น่าตื่นเต้นจริงๆเมื่อมันทำงาน แต่แน่นอนเริ่มต้นการอ่านว่า มาพูดคุยกับฉันถ้าคุณ มีคำถามเกี่ยวกับเรื่องนี้ ตกลงดังนั้นขณะที่ผมกำลังพูด fread อ่านจำนวนหนึ่งไบต์ นั่นคือจำนวนข้อบาง ที่คุณกำลังจะตั้ง แล้ว fseek เพียงแค่ย้าย ตำแหน่งใดตำแหน่งหนึ่ง ดังนั้นบางทีคุณอาจจะไม่สนใจ เกี่ยวกับ 10 ไบต์ต่อไป คุณเพียงแค่ต้องการที่จะข้ามไป คุณไม่สนใจเกี่ยวกับคนเหล่านั้น คุณต้องการอ่านเริ่มต้นที่ 11 ไบต์ fseek ช่วยให้คุณสามารถทำเช่นนั้นได้ ดังนั้นมันจึงช่วยให้คุณสามารถเลือก เกี่ยวกับสิ่งที่คุณกำลังอ่าน เพราะ fgetc, fgets และอ่าน fread จากสถานที่บางอย่างในแฟ้ม วิธีการที่จะคิดเกี่ยวกับเรื่องนี้คือถ้านี้ เป็นไฟล์ของเราเมื่อคุณเปิดครั้งแรก คุณมีตำแหน่งในไฟล์นี้ ที่จะเริ่มต้นที่จุดเริ่มต้น เมื่อใดก็ตามที่คุณเรียก fgetc, fgetf หรือ fread, มันจะต้องเริ่มต้นจาก เครื่องหมายตำแหน่งนี้ สมมติว่าคุณเพียงต้องการที่จะอ่าน อันนี้ของหน่วยความจำมากกว่าที่นี่ คุณไม่สามารถเพียงโทร คุณต้องไปหาที่นี่ แล้วอ่านจากที่นั่น หรืออ่านได้รับหรือ GETC, ขึ้นอยู่กับสิ่งที่คุณต้องการ ดังนั้นขอเพียงช่วยให้คุณสามารถ ข้ามส่วนของหน่วยความจำ และนั่นเป็นเพียง วิธีการที่คุณสามารถข้ามสิ่ง โดยไม่ต้องอ่านให้พวกเขาลงในบัฟเฟอร์ของคุณ ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ เห็นได้ชัดว่ามี จำนวนมากตรงนี้ขนาน การเปลี่ยนเส้นทางการส่งออกหรือการป้อนข้อมูลของเรา คุณได้อ่านและเขียน ดังนั้น fputc เพียงแค่เขียน ตัวอักษรลงในแฟ้ม fputs เขียนเส้น fprintf พิมพ์เอาท์พุทที่จัดรูปแบบ ดังนั้นถ้าคุณมีแท็บ หรือพื้นที่หรือ whatnot แล้ว fwrite เขียนบาง อาร์เรย์ของไบต์ไปยังแฟ้ม ดังนั้นนี่คือวิธีการเดียวกัน fwrite และ fread คล้ายคลึง fgets opposites--, fputs และ แล้วจำนวนมาก fputc และ fgetc-- บ้าสิ่งที่รวดเร็ว เพียงชนิดของให้ handy-- นี้ คุณจะมีเวลาที่ต่างกัน ที่บางทีคุณอาจเพียงต้องการ ตัวละครตัวหนึ่งในช่วงเวลาที่ บางทีคุณอาจต้องการทั้งบรรทัด ด้วย pset-- พจนานุกรมของคุณ ซึ่งอยู่ในสอง psets, ผมเชื่อว่าเราจะให้คุณทั้ง พจนานุกรมในรูปแบบข้อความ ซึ่งมีทุกคำ แยกจากกันโดยเส้น ดังนั้นถ้าคุณอยากจะอ่าน ในหนึ่งคำที่เวลา สิ่งที่คุณอาจจะใช้ถ้าคุณกำลังอ่าน และพวกเขากำลังแยกออกจากกันทั้งหมดในสายใหม่ และคุณต้องการเพียงแค่หนึ่งคำในเวลา? ผู้ชม: fgets ลำโพง 1: ขวา Fgets-- เพราะที่ส่งกลับ สิ่งที่อยู่ในหนึ่งบรรทัด และถ้าทุกคำพูดเป็นของตน แนวความคิดของเราสามารถใช้ fgets เย็น ไม่ว่าทำให้ความรู้สึกที่ทุกคน? เย็น? ใช่เรากำลังจะได้รับการ ส่วนที่สนุกกับคำแนะนำ เร็ว ๆ นี้ที่คุณ ได้รับที่จะทำคณิตศาสตร์บาง และมันจะดี ล่าสุด step-- ปิดแฟ้มของคุณ มีหลายสิ่งหลายอย่างที่นี่ หนึ่งในกรอบความคิดของเรา คือถ้ามันสามารถกลับ null ตรวจสอบ null ถ้าคุณเปิดบางสิ่งบางอย่าง คุณควรที่จะปิดมัน ตกลงดังนั้นคุณไม่ได้ทำจนกว่าคุณจะ ทำถ้าคุณไม่ได้ปิดมัน เหมือนมันยังไม่จบ จนผู้หญิงไขมันร้องเพลง นั่นเป็นเหมือนการปิดไฟล์ของคุณ ตามที่กล่าวนี่เพียง จะย้ำเสมอ เปิดไฟล์ของคุณก่อนที่คุณจะ การอ่านหรือเขียนได้ และมักจะปิดมันถ้าคุณได้เปิดมัน ทั้งหมดใช่มั้ย? เย็น ดังนั้นนี่คือตัวอย่าง ดังนั้น tiny-- ผมไม่ทราบว่าคุณ คนจะเห็นได้ว่าดีมาก ถ้าเพียง แต่เราสามารถที่จะเพิ่มขึ้น ความสว่างอย่างใด ให้ฉันจริงทำเช่นนี้หากฉันสามารถ ตกลงพวกคุณไม่สามารถจริงๆ เห็นว่าที่ทุกคนได้ไหม ตกลงเราจะทำเช่นนี้แล้ว [ไม่ได้ยิน] ผมถือว่านี้จะดีกว่ามากที่จะเห็น ทุกคนสามารถดูที่ของฉัน เมาส์ไปคือคำถาม? อามีมันเท่าไหร่สิ่งที่ต้องดิ้นรน! ตกลง โดยทั่วไปพวกคุณควรจะมีชนิด ของความคิดของสิ่งนี้จะทำ มันไม่สมบูรณ์แบบ แต่ผมอยากจะอธิบายได้ดีกว่าการใช้จ่าย เวลามากขึ้นพยายามที่จะจัดรูปแบบได้อย่างถูกต้อง โดยทั่วไปตามที่คุณเห็นที่นี่ เราเริ่มต้นด้วยการเปิดไฟล์ และเรามีบางอย่าง แฟ้มฐานข้อมูลที่เรามี เปิดที่บอกว่ามันเป็นนักเรียนของเรา และเรากำลังจะเขียนถึงมัน ดังนั้นแน่นอนกลับ null ดังนั้นเราจึงมีการตรวจสอบเป็นโมฆะ แล้วถ้ามันไม่ได้ null เราผ่านไป และที่คุณเห็นเราไม่ วนลูปผ่านที่นี่ มีนักเรียน นักเรียนเป็นกัญชากำหนดให้เป็นสาม และสิ่งที่เรากำลังทำคือการที่เรามี พิมพ์ไปยังแฟ้มใช่มั้ย? ดังนั้นเราจึงเป็นสิ่งที่พิมพ์ออกไปยังไฟล์ของเราหรือไม่ ผู้ชม: คะแนน ที่อยู่ในอาเรย์? ลำโพง 1: ใช่ คะแนนที่อยู่ใน array-- ว่า ดังนั้นเราจะเปิดนี้ แฟ้มฐานข้อมูลซึ่ง ผมถือว่าเป็นอะไรบางอย่าง ของฐานข้อมูลเกรด และเรากำลังเพียงแค่พิมพ์ออก คะแนนของนักเรียนแต่ละคนไปยังไฟล์ที่ เย็น? ดี น่ากลัว ตกลง ขอกลับ to-- ผู้ชม: ฉันมีคำถามอย่างรวดเร็ว เป็น printf ไม่ได้อยู่ในการห่วง? นั่นเป็นเพียงในวงถ้า? ลำโพง 1: ไม่มันในการห่วง ฉันไม่เห็นเมาส์ของฉันได้ดีมากขึ้นที่นี่ ดังนั้นฉันพยายามที่จะ รูปแบบที่ถูกต้อง วงเล็บนี้ควรจะหายไป มันควรจะลงที่นี่ นี่คือสิ่งที่อยู่ในของคุณสำหรับวง ที่นั่น ตอนนี้ก็สวย นั่นคือวิธีการที่ควร be-- ยกเว้น สำหรับการที่ตัวล่าสุดที่ผมออก ตกลง ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ ตกลง เรากำลังจะดำเนินการต่อไป ยังสิ่งต่อไป then-- ซึ่งในความเป็นจริงคุณจะ ที่จะต้องดูรหัส ดังนั้นฉันแค่ไป คัดลอกว่ากว่าตอนนี้ ตกลง ดังนั้นฉันจะแสดงให้พวกคุณรหัสนี้ และผมอยากให้คุณลองและตัวเลข จากสิ่งที่มันควรจะทำ ให้ดังนั้น that-- ใช้เวลานาทีหรือมากกว่านั้น ลองและคิดออกว่าเกิดอะไรขึ้นที่นี่ ความคิดใด? เรารู้ว่าเรามีอย่างน้อยสอง ข้อโต้แย้งในบรรทัดคำสั่งใช่มั้ย? ผมถือว่าหนึ่งซึ่งเป็นไปได้ ที่ [ไม่ได้ยิน] ของโปรแกรมของเราเป็น แล้วอย่างอื่น เพราะถ้า [ไม่ได้ยิน] น้อย กว่าสองเราตะโกนใส่พวกเขา ใช่มั้ย? และจากการใช้งานดูเหมือนว่า มันเป็นไปได้การจัดเรียงของบางไฟล์ เราทุกคนเห็นด้วยกับการที่? ดังนั้นตอนนี้สิ่งที่เป็นห่วงการทำ? สิ่งที่มันจะผ่าน? ผู้ชม: ไฟล์ทั้งหมด ลำโพง 1: แน่นอน มันจะผ่านทั้งหมด ไฟล์ที่เราได้ใส่มี ดังนั้นสำหรับแต่ละไฟล์ก็ เปิดขึ้นสตริงบางมี มันเปิดไฟล์นั้น ใช่มั้ย? และก็อ่านจากมัน แน่นอนว่าการตรวจสอบว่าเป็นโมฆะ และแล้วก็พิมพ์ ถ้าเป็นโมฆะก็เพียงบอกเรา ว่าที่ไม่ใช่ไฟล์ที่มีอยู่ เพราะจำได้ว่ามี อ่านไฟล์ของเรามีอยู่ ใช่มั้ย? ด้วยการเขียนและการผนวก, คุณจะได้รับไปกับมัน แต่ด้วยการอ่านไฟล์ของเรามีอยู่ แล้วถ้ามันไม่อยู่ สิ่งที่เราทำอะไรที่นี่? ขอเพียงเริ่มต้นที่นี่ นี่คืออะไร do-- อักษรตัวแรกนี้ มันทำอะไรได้บ้าง เขาได้รับตัวละครตัวหนึ่งใช่มั้ย? ดังนั้นสิ่งที่จะทำเช่นนี้? มันได้รับตัวอักษรตัวแรก ใครรู้ EOF? ผู้ชม: End ของไฟล์? ลำโพง 1: จุดจบของ file-- ว่า ดังนั้นมันจะผ่านไป ไฟล์ทั้งหมดใช่มั้ย? และจากนั้นก็จะปรับปรุงโดย รับทุกตัวอักษรที่ตามมา ใช่มั้ย? และสิ่งที่มันทำอะไร? ผู้ชม: ใส่ที่ in-- ลำโพง 1: putchar พิมพ์ ที่หน้าจอของคุณ [ไม่ได้ยิน] ตัวละคร แล้วเมื่อมัน [ไม่ได้ยิน] นี้จะปิดแฟ้ม ผู้ชม: คุณไม่จำเป็นต้อง [? อื่น? ?] ลำโพง 1: ไม่จำเป็นต้อง ผมหมายถึงมันส่อให้เห็นชนิดของในครั้งนี้ เพราะผลตอบแทนที่ได้ แต่ตราบใด เช่นนี้ไม่ได้จับนี้คุณจะสบายดี ฉันหมายความว่ามันอาจจะเป็นสิ่งที่ดี ฝึกที่จะทำอย่างอื่น แต่ที่อื่นไม่ได้เสมอ ที่จำเป็นโดยเฉพาะอย่างยิ่ง ถ้าคุณมีบางสิ่งบางอย่าง เช่นเดียวกับผลตอบแทนที่ หมายความว่าในกรณีนี้ถ้าจะจับ มันโปรแกรมของคุณจะสิ้นสุด และมันจะไม่เคยได้รับนี้ มันเป็นมากขึ้นสำหรับกรณีที่คุณอยู่ ไม่จำเป็นต้องมีอะไรบางอย่างกลับมา เพราะถ้าเรื่องนี้ไม่ได้ กลับอะไร มันจะหมายความว่าถ้าเรื่องนี้เป็นจริง ส่วนที่เหลือนี้จะยังคงทำงาน และในกรณีที่คุณ ต้องการเท็จ ถ้ามันกลับมาและ จบโปรแกรมของคุณ อื่นที่ไม่จำเป็นทั้งหมด เวลาขึ้นอยู่กับบริบท จาค็อบ, คุณมีคำถาม? ผู้ชม: ใช่ เพื่อไม่ fgetc ได้รับตัวอักษรต่อไปหรือไม่ วิธีการที่ไม่เป็นตัวละครเพิ่มขึ้น? ลำโพง 1: ใช่ ดังนั้น fgetc ได้รับตัวอักษรถัดไป คุณสามารถคิดว่ามันเช่น C ++ ในความรู้สึก ผู้ชม: ดังนั้นสิ่งที่เป็น EOF? ลำโพง 1: EOF เป็นจุดสิ้นสุดของแฟ้ม มันเป็นเพียงเครื่องหมายที่ช่วยให้คุณรู้ว่า ว่าคุณจะอยู่ที่ส่วนท้ายของไฟล์ของคุณ ดังนั้นนี้จะพิมพ์ มาตรฐานของคุณออก และจากนั้นก็จะปิด ไฟล์เมื่อมันทำ แล้วให้ไปที่ ไฟล์ต่อไปใช่มั้ย? ดังนั้นโดยรวมสิ่งที่ไม่โปรแกรมนี้จะทำอย่างไร [ไม่ได้ยิน] ลำโพง 1: ใช่ มันก็พิมพ์ทุกสิ่งที่มี ดังนั้นกสท. ถ้าพวกคุณได้เคยใช้ แล้วชื่อของ file-- บาง ผมไม่ทราบว่าถ้าใด ๆ ของคุณมี เคยทำที่ใน terminal ของคุณ แต่ถ้าคุณเคยใช้ คำสั่ง CAT-- C-A-T-- และแล้วสิ่งที่ไฟล์ คุณมีตรงนี้มัน พิมพ์มันออกไปยังสถานีของคุณซึ่ง สามารถเป็นซุปเปอร์ที่มีประโยชน์สำหรับบางสิ่งบางอย่าง ผมใช้มันมาก ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ เย็น? OK เพื่อให้งานของคุณ now-- ทั้งโดย ตัวคุณเองหรือกับคนรอบ you-- คือการเขียนโปรแกรมที่ง่าย ที่เพิ่งจะเขียนคำว่า "สวัสดีชาวโลก!" ออกไปยังแฟ้ม [ไม่ได้ยิน] [ไม่ได้ยิน] ลำโพง 1: ฉันก็ชอบทำ ฉันว่าเมื่อสัปดาห์ที่แล้วไม่ดี? ผมไม่ได้คิดว่ามันเป็นที่เลวร้าย ฉันดีใจที่คุณกำลังทั้งหมดที่นี่ จริงๆมันทำให้ฉันมีความสุข ฉันสาวของความสุขเรียบง่าย ฉันเช่นเดียวกับเมื่อส่วนของฉันเข้าร่วม ดังนั้นฉันแค่นี้เริ่มต้นสำหรับ พวกคุณเพื่อให้เราสามารถรหัสร่วมกัน ฉันไม่ชอบใส่ทุกคนใน จุดที่ถ้าคุณต้องการที่จะเป็น ผู้ชม: สำหรับแบบทดสอบให้ทำ เราจะต้องเขียนโปรแกรม? ลำโพงที่ 1: คุณอาจถูกขอให้ เขียนโปรแกรมอย่างง่ายด้วยมือ Yup ผู้ชม: แบบทดสอบเป็นสัปดาห์ถัดไปใช่ไหม? ลำโพง 1: แบบทดสอบเป็นวันพุธหน้า นั่นหมายความว่ามี [น่ารัก? CSE?] การจัดลำดับบุคคลที่หลังจากนั้นซึ่ง หมายความว่าคุณจะได้รับคะแนนของคุณ หลังที่ night-- ในสิ่งที่เวลา? ใครจะรู้? แต่มันจะเป็นคืนที่ สิทธิ์ทั้งหมด ทำอย่างไรเราต้องการที่จะเริ่มต้นนี้หรือไม่? ฉันจะให้คุณเริ่มต้น hint-- กับเรื่องนี้ ผู้ชม: คุณต้องเปิดไฟล์ ลำโพง 1: ใช่ ดังนั้นสิ่งที่คุณต้องการที่จะเรียกสิ่งนี้? คุณเพียงต้องการที่จะเรียกว่า "แฟ้ม"? ขอให้เป็นเรื่องง่าย ดังนั้น fopen-- สิ่งที่เรา การทดสอบการแสดงผลจะเป็นอย่างไร เรียกมันว่า "สวัสดี". และสิ่งที่เป็นโหมดของเราหรือไม่ สิ่งที่เราทำกับไฟล์นี้หรือไม่? ผู้ชม: อ่าน การเขียน ลำโพง 1: เรากำลังเขียนถึงมัน น่ารัก ตกลงดังนั้นเราจึงมีเดี๋ยวนี้ เราต้องการอะไรจะทำอย่างไร? ผู้ชม: ตรวจสอบว่าเป็นโมฆะ ลำโพง 1: ตรวจสอบว่าเป็น null-- ว่า นั่นคือสิ่งที่ฉันต้องการจะได้ยิน ที่ควรจะเป็นไปโดยอัตโนมัติโดยเฉพาะอย่างยิ่ง สวยมากจากจุดนี้ หากคุณเริ่มต้น segfaulting คุณอาจ ไม่ได้ตรวจสอบสำหรับ null ที่ไหนสักแห่ง เก้าสิบครั้งจากที่ จะเป็นข้อผิดพลาดของคุณ ดังนั้นหากคุณเพิ่งจะได้รับใน นิสัยมักจะตรวจสอบว่าเป็นโมฆะ ชีวิตของคุณเป็นไปได้ ที่ดีและ easy-- หรือง่าย เพื่อตรวจสอบเพื่อดูว่ามันเป็นโมฆะ ดังนั้นถ้ามันไม่เป็นโมฆะซึ่ง คือสิ่งที่บางเท่ากับ means-- ไม่ null-- มันถูกต้อง สิ่งที่เราต้องการจะทำอย่างไร เราเพียงแค่ต้องการที่จะพิมพ์ ไปยังไฟล์ที่ใช่มั้ย? ดังนั้นเราจึงเป็นสิ่งที่จะใช้งานหรือไม่ ผู้ชม: fprintf ลำโพง 1: Fprintf-- ที่น่ารัก และ fprintf ใช้เวลาสอง arguments-- ที่ มันจะและสิ่งที่เราต้องการพิมพ์ ดังนั้นสิ่งที่เป็นคนแรก? อยู่ที่ไหนมันจะไปไหน? ผู้ชม: ไฟล์ ลำโพง 1: มันจะยื่น และเราทำในสิ่งที่ต้องการพิมพ์? "สวัสดีชาวโลก" สิทธิ์ทั้งหมด เรามีหนึ่ง thing-- ล่าสุด กระบวนทัศน์ขนาดใหญ่อีกที่นี่ ผู้ชม: ปิด ลำโพง 1: ปิด มีคุณไป ผู้ชม: ที่เกิดขึ้นนี้ ถ้าไฟล์เป็นโมฆะ? ลำโพง 1: ไม่มีนี้ถ้ามันไม่เป็นโมฆะ ผู้ชม: โอ้ถ้ามันตกลง not-- สำหรับ fopen แล้​​ว สองอาร์กิวเมนต์ที่ไปภายใน สิ่งที่ไม่อาร์กิวเมนต์แรกหมายถึงอีกครั้งหรือไม่ ลำโพง 1: อาร์กิวเมนต์เป็น เช่นเดียวกับชื่อของไฟล์ ที่คุณอยากไป ดังนั้นหลังจากนี้จะทำงานคุณจะ มีไฟล์บางอย่างที่เรียกว่า "สวัสดี" ที่มี "สวัสดีโลก" ที่อยู่ภายใน นั่นคือทั้งหมดที่ เพียงแค่ชื่อ ผู้ชม: และเนื่องจากมันเขียน ไฟล์ไม่จำเป็นต้องมีอยู่แล้ว นั่นคือสิ่งที่คุณกล่าวว่า? ลำโพง 1: ขวา เผง หาก "สวัสดี" เป็นไฟล์ ยังไม่ปรากฏอยู่ก็ จะสร้างไฟล์ที่เรียกว่า ฮัลโหล "และเขียนไปให้คุณ ผู้ชม: เมื่อคุณบอก โปรแกรมที่จะเขียนไปยังแฟ้ม ทำไมคุณเขียน "แฟ้ม" แทน ชื่อของไฟล์และ fprintf-- ลำโพง 1: เพราะในกรณีนี้เรามี FILE-- ขนาดใหญ่ที่ทั้งหมดในดาว caps--, ไฟล์ ดังนั้นจึงเป็นตัวชี้ไปยังแฟ้ม ที่คุณกำลังพูดถึง นี้เป็นวิธีที่ เราก็เรียกมัน ดังนั้นในกรณีนี้คุณ สามารถคิด AHA file--, เราสามารถใช้ไฟล์เจ้านี่ที่นี่ หมายถึงการเปิดตัวของ "ฮัลโหล" และให้มันเขียน ผู้ชม: เราสามารถใส่ "Hello" แทน [? เพียง?] ฉไฟล์? ลำโพง 1: ไม่มีเพราะ "Hello" จะต้องมีการเปิดและเขียนได้ ไฟล์ที่นี่เป็นเหมือน designator ว่าตกลงเรา มี hello-- file-- นี้ ที่เรากำลังมองหาที่ จะได้รับการเปิด และเราจะไปเขียนไป หากคุณเพียงแค่ใช้ "สวัสดี" ที่ถูกห่อหุ้มอยู่ในนั้น ดังนั้นมันจะออกนอกลู่นอกทาง ฉันหมายความว่าคุณจะได้ตั้งชื่อมัน คุณอาจจะได้ทำไฟล์ ดาว "Hello" เท่ากับว่า แต่จุดทั้งเป็นที่คุณ จำเป็นต้องมีตัวชี้แฟ้มดาวในการสั่งซื้อ เพื่อให้สามารถใช้ฟังก์ชั่นเหล่านี้ ผู้ชม: คุณสามารถทำ ไฟล์, ดาว, แฟ้ม, "Hello" หรือคุณไม่ต้องใส่ ไฟล์ดาวแฟ้มโดยมันได้หรือไม่ ลำโพงที่ 1: คุณสามารถทำได้ ทำไฟล์, ดาว, "สวัสดี". คุณสามารถเปลี่ยนนี้ สิ่งที่ชื่อที่คุณต้องการ มันเป็นโดยพลการอย่างสมบูรณ์ สิ่งที่ชื่อที่เป็น คุณสามารถตั้งชื่ออะไร ชื่อมันบินปาเก็ตตี้ถ้าคุณต้องการ ผู้ชม: อะไรคือสิ่งที่ "W" ในเครื่องหมายคำพูดหรือไม่? ลำโพง 1: "W" เป็นเพียงโหมด ดังนั้นเราจึงกำลังเขียนมาที่ภาพนี้ ทุกคนที่ดี? ชัดเจน? ใช่ ผู้ชม: ดังนั้นเมื่อมันเขียนนี้ ไฟล์ที่เราทำแล้วหาไฟล์ที่? ลำโพง 1: มันจะอยู่ในที่เดียวกัน ไดเรกทอรีที่คุณอยู่ในขณะนี้ ถ้าคุณอยู่ใน pset สาม คุณทำงานนี้ภายใน pset ของคุณ โฟลเดอร์ที่สามเป็นไปได้ ไฟล์นี้เรียกว่า "สวัสดี". เย็น? ทุกคนที่ดี? ฉันรู้สึกเหมือนคุณกำลังทั้งหมด ได้รับมันซึ่งเป็นที่ดี ตกลง เพื่อกลับไป show-- สไลด์ของฉัน ฉันรักเมื่อสิ่งที่ทำงาน ตกลง pointers-- พวกคุณตื่นเต้น? ตัวชี้ที่ดี พวกเขาใช้เวลานิด ๆ หน่อย ๆ การห่อหัวของรอบ ปีนี้เป็นปีที่สองของฉัน ชี้การเรียนการสอน และผมคิดว่าในที่สุดผมก็มีมัน ดังนั้นถ้าคุณต่อสู้ก็ OK ที่ผมกล่าวว่าก่อนที่จะวาดภาพ จะช่วยให้มากกับสิ่งที่อยู่ใน CS, มากที่สุดเท่าที่ผมคิดว่าคนมีแนวโน้มที่ จะคิดว่าโอ้เราอยู่ที่คอมพิวเตอร์ เราควรรหัสเพียง ภาพวาด No-- จริงๆจะช่วยให้คุณ และผมขอแนะนำให้คุณ แตะลงในด้าน kindergartner ของคุณ และนำออกดินสอสี หรือเครื่องหมายและดึง เพราะมันจะช่วยให้คุณ และถ้าคุณเห็นฉันในเวลาทำงานผม จะแบกไปรอบ ๆ กองกระดาษ ด้วยปากกาวาดภาพสิ่งที่ออก ดังนั้นโดยเฉพาะอย่างยิ่งกับ pointers-- วาดภาพ และผมมั่นใจว่าเราจะจริงจะ ได้รับการวาดภาพบางส่วนที่นี่ด้วย ดังนั้นพวกคุณทุกคนได้เห็นบิงกี้ สิ่งนี้ claymation เย็น และเราคิดว่ามันตลกจริงๆเมื่อ เขาระเบิดเป็นพวงของชิ้น มันเป็นบางอย่างที่การ์ตูนโล่งอกสำหรับชั้นเรียน C [ไม่ได้ยิน] ความสามารถที่ดีนี้ เพื่อให้สามารถควบคุมหน่วยความจำ และมันเป็นหนึ่งในสิ่งที่จริงๆ ทำให้มันดังกล่าวเป็นภาษาที่มีประสิทธิภาพ แต่ด้วยพลังอันยิ่งใหญ่มา ความรับผิดชอบที่ดี และสิ่งที่สามารถเกิดขึ้นได้บ้า ถ้าคุณไม่ระมัดระวัง ดังนั้นเมื่อคุณกำลังใช้ ตัวชี้ที่คุณต้องการให้ แน่ใจว่าคุณเข้าใจจริงๆ ว่าสิ่งที่คุณกำลังทำ หวังว่านิด ๆ หน่อย ๆ ต่อไปของ เวลาจะช่วยให้คุณเข้าใจจริงๆ ชี้วิธีการที่จะใช้พวกเขา และวิธีการจัดการกับพวกเขา ดังนั้น memory-- ฉันแน่ใจว่าเราได้ เห็นแผนภาพนี้ก่อน ดังนั้นนี้เป็นเพียงแผนภาพง่ายของ ว่าสิ่งที่อาจจะมีการจัดเก็บไว้ในหน่วยความจำ เพื่อให้คุณโดยทั่วไปมีเหล่านี้ อาร์เรย์ขนาดใหญ่ของบล็อกหนึ่งไบต์ เป็นสิ่งที่เรามีเล็กน้อยตรงนี้ เพิ่มขึ้นโดยหนึ่งในแต่ละครั้ง นี้อยู่ในฐานสิบหก [ไม่ได้ยิน] เพื่อให้บล็อกแปดบิต และทุกบล็อกที่เกี่ยวข้อง กับบางส่วนที่อยู่เลขฐานสิบหก ดังนั้นถ้าคุณเคยเห็น 0x ที่เพียง notating ว่ามันเป็นที่อยู่เลขฐานสิบหก คุณสามารถสมมตินี้หมายถึง ที่อยู่ในความทรงจำบางส่วน เรากำลังพูดถึงอยู่หน่วยความจำ เมื่อใดก็ตามที่คุณเห็นเลขฐานสิบหก เรามี ints เป็นตัวแปร ลอยเป็นตัวแปรที่เก็บ ดังนั้น ints ints ร้าน ลอยลอยเก็บ ดังนั้นเรายังมีคำแนะนำ ที่อยู่หน่วยความจำเก็บ นั่นคือการเรียงลำดับของการทำแผนที่ ชี้เป็นเฉพาะ ที่อยู่หน่วยความจำ เพื่อให้เป็นเช่นชนิดของคุณมี เครื่องใช้ไฟฟ้าของคุณคือ 32 บิตซึ่งหมายความว่า ที่อยู่หน่วยความจำของคุณเป็นสี่ไบต์ ดังนั้นตัวชี้ใด ๆ ที่คุณมี นอกจากนี้ยังเป็นไปได้สี่ไบต์ หรืออื่น ๆ ถ้าหากมันเป็นสี่ไบต์ หน่วยความจำสี่ไบต์ หน่วยความจำเก็บชี้ ดังนั้นพวกเขากำลังสี่ไบต์ Cool-- เพียงต้องการที่จะเสริมสร้างว่า คุณควรจะได้รับการ์ตูนในตอนนี้ ผมไม่ทราบว่าหลายท่าน เป็นแฟน XKCD แต่ฉันรัก XKCD มันยิ่งใหญ่ สิทธิ์ทั้งหมด ดังนั้นการสร้าง pointers-- ที่ผมกล่าวว่ามันเป็น สวยมากเช่นเดียวกับสิ่งอื่น คุณมีประเภท คุณมีชื่อ ใช่มั้ย? นั่นคือสิ่งที่เราต้องมี [? Hex?] ดาวหมายความว่ามันเป็นตัวชี้ แล้วสิ่งที่คุณต้องการจะเรียกมันว่า ดังนั้นชนิดหมายถึง สิ่งที่คุณสามารถจัดเก็บ ทั้งหมดใช่มั้ย? ในทำนองเดียวกับที่ว่าถ้าเราทำ ints, เรารู้ว่าเรากำลังจัดเก็บ int มี มีตัวชี้มัน ถืออยู่หน่วยความจำ แต่สิ่งที่มันหมายถึงการเป็น that-- นี่คือสิ่งที่ การวาดภาพจะมาในสะดวก ดังนั้นในกรณีนี้เรามี บาง value-- สมมติว่าสี่ สี่เป็นที่อยู่ที่หนึ่ง OK? นี้เป็นครั้งแรกที่นี่หมายถึง ว่ามันเป็นตัวชี้ 2x ใช่มั้ย? มันเป็นบางตัวชี้ x x อาจจะเป็นสิ่งใด ไม่ว่า x เป็นเท่าไหร่บอกว่า x เป็นสี่ มันจะเก็บ หน่วยความจำที่อยู่ที่นี่ ดังนั้น int, ดาว, ค่า x นี้ บางช่องอื่น ๆ ใน memory-- ใครจะรู้ว่านี่คืออะไร แต่มันจะเก็บอยู่ที่นี่ ดังนั้นนี้จะเป็น like-- ในกรณีนี้ไม่ว่า, จะถูกเก็บไว้ที่ 0x1-- สิ่งที่ถูกเก็บไว้ ตามที่อยู่ที่ตัวชี้ของเราถือ, มีเพื่อให้ตรงกับขึ้นกับ สิ่งที่เราได้กำหนด ดังนั้นใน 0x1 ในกรณีนี้นี้คือ x นี้สามารถเท่านั้นที่เคยเป็น int ในขณะที่เรากำลังใช้นี้ ในทำนองเดียวกันถ้าเรามี 1y อื่นใด ที่อยู่จะถูกเก็บไว้ด้วยและมี จะเป็นสิ่งเดียวกันกับ char-- Z ในลักษณะเดียวกับเมื่อใดก็ตามที่คุณ พยายามทำ INTX เท่ากับ 0.4, มันจะตะโกนที่คุณและเป็น ที่ไม่เหมือนใคร, คุณบอกว่าคุณอยาก int นี้ควรจะเป็น int หยุดความพยายามที่จะให้มันลอย ดังนั้นปล่อยให้สิ่งที่จะเป็นในสิ่งที่พวกเขาต้องการที่จะเป็น ปล่อยให้สิ่งที่เป็นตัวเอง ดังนั้นสิ่งที่ใหญ่เป็นเพียง สิ่งที่ชนิดของตัวชี้ ก็คือว่าเป็นเพียง สิ่งที่คุณสามารถจัดเก็บมี OK? กับการปฏิบัติเช่นเดียวกับ เมื่อสัปดาห์ที่แล้วทุกอย่าง ดูเหมือนว่าจริงๆชนิดของนามธรรม เรากำลังจะทำปฏิบัติบาง มันควรจะทำให้รู้สึกมากขึ้น ดังนั้นการอ้างอิงและ dereferencing-- มัน สำคัญมากที่จะได้รับเหล่านี้ตรง ฉันยังคงต้องมีการฟื้นฟู ทุกขณะนี้แล้ว และฉันชอบรอที่หนึ่งที่ฉันไม่ต้องการ? ดังนั้นเครื่องหมายจริงจะให้ คุณอ้างอิงหรือที่อยู่ของ ดังนั้นมันกลับมาอยู่ใน หน่วยความจำที่ตัวแปรจะถูกเก็บไว้ ดังนั้นมันจะจริงกลับไปยังคุณ เลขฐานสิบหกในขณะ dereferencing มัน เป็นจริงที่จะให้คุณ ข้อมูลที่ถูกเก็บไว้ที่นั่น OK? ดังนั้นเราจะดูตัวอย่าง อย่างรวดเร็วจริงๆหรือจริงขึ้นต่อไป ตกลง ดังนั้นเราจะต้องคิดว่า อย่างระมัดระวังเกี่ยวกับเรื่องนี้ ดังนั้นที่นี่เรามีบางจำนวนเต็ม x ฉันจะพยายามและวาดนี้ ออกที่ดีที่สุดของความสามารถของฉัน ดังนั้นเรากำลังจะมีช่อง x นี้ และจะจัดเก็บห้า ที่อยู่ของมันคือ 0x4 เย็น? ดีทั้งหมด ดังนั้นตอนนี้เรามีตัวชี้นี้ มันเป็นมากกว่าที่นี่ และเครื่องหมายให้เรา ที่อยู่ของบางสิ่งบางอย่าง ดังนั้นในกรณีนี้มันเป็นที่อยู่ของ x เป็นที่อยู่ของ x คืออะไร? 04-- และตัวชี้นี้เป็น 0x08 เย็น? เพื่อให้คุณสามารถคิดเกี่ยวกับเรื่องนี้ ตัวชี้ที่ 04 เพียงแค่ชี้ไปที่นี่ และพวกเขากำลังเรียกว่าตัวชี้ เพราะในขณะที่เราได้รับมากขึ้นในการนี​​้ คุณกำลังจะไปดูที่ชี้ไปยังสิ่งที่ และเป็นหนึ่งในบล็อกชี้ไปที่อื่น บล็อกจะทำให้รู้สึกมากขึ้น ดังนั้นนี่คือสอง แล้วเรามีบาง สำเนาซึ่งเป็น 0x0c what-- และมันจะ dereference ตัวชี้ของเรา ดังนั้นสิ่งที่จะพูดคือ ตกลงนี่เป็นตัวชี้ของเรา ค่าที่มันเก็บเป็น 0x04, และสิ่งที่ มันบอกว่าจะไปที่ที่อยู่นี้ และบอกฉันว่ามีอะไรอยู่ในนั้น เพื่อให้ได้อย่างมีประสิทธิภาพ สิ่งที่ลูกศรนี้จะทำ คุณสามารถคิดเช่นนี้ดาวของคุณ ดังนั้นตกลงเมื่อเราทำดาวจะหมายถึงการปฏิบัติตาม ไปที่ที่อยู่นี้ และที่พื้นเพียงต่อไปนี้ ลูกศรนี้เพื่อก้อนหน่วยความจำนี้ และให้เราสิ่งที่อยู่ในนั้นซึ่งคือ 5 มันเป็นเหตุผลที่สำเนาของเราเท่ากับ 5 ที่ทำให้รู้สึก? ไม่มีใครต้องการฉันจะไปถึง ที่อีกครั้งหรือช้ามากขึ้น? คุณต้องการให้ฉันไป ผ่านมันอีกครั้งหนึ่ง? ตกลง เรากำลังจะไปวาดมันอีกครั้ง เมื่อเราเริ่มต้นเราทั้งหมดเห็นด้วยเรามี ก้อนบางส่วนของหน่วยความจำที่เป็นตัวแปร x ที่เราตั้งไว้เท่ากับ 5 เราไม่ได้ควบคุมที่อยู่ในหน่วยความจำ ดังนั้นจุดนี้เป็นเพียง ที่ได้รับมอบหมายพล ที่ดีมี? ตกลง จากนั้นเราก็เริ่มต้นชี้ไปยัง int นั่นเป็นเหตุผลที่มันได้รับอนุญาตให้ชี้ไปที่ x เพราะเรามี int ที่นี่ เรามีก้อนของอีกคนหนึ่ง หน่วยความจำเพราะตัวชี้นี้ เป็นตัวแปรเช่นเดียวกับสิ่งอื่น มันได้รับมอบหมายให้พล พื้นที่ในหน่วยความจำบางส่วน และสิ่งที่จะเก็บเป็นที่อยู่ของ x สัญลักษณ์หมายถึงที่อยู่ของ x ดังนั้นสิ่งที่เป็นที่อยู่ของ x? ผู้ชม: มัน zero-- ลำโพง 1: 0x04 ดังนั้น then-- สุดท้าย เรามี copy-- บางอีกครั้ง เพียงตัวแปรอื่น จึงขอกำหนดสถานที่โดยพลบางส่วน และเรา dereference ตัวชี้ของเรา ดาวหมายถึงการไปที่ ที่อยู่ที่เก็บไว้ในตัวชี้ของฉัน บอกสิ่งที่มี ดังนั้นที่อยู่ที่เก็บไว้ ในตัวชี้เราคือ 0x04 ดังนั้นเราจะไปยังที่อยู่ที่ มันชี้ไปยังที่อยู่ที่ สิ่งที่อยู่ภายในบล็อกหน่วยความจำนี้หรือไม่? มันเป็นห้า นั่นคือสิ่งที่เรากำหนดสำเนาของเรา ทุกคนที่ดี? เย็น ภาพเหมือนเดิม ดังนั้นการติดตามค่าตรงนี้ฉัน จะให้พวกคุณคิดว่าเกี่ยวกับเรื่องนี้ เราสามารถวาดภาพอื่น แต่ผมอยากให้คุณลองและเหตุผล ผ่านทางนี้ด้วยตัวคุณเองสำหรับนาที เนื่องจากพวกเขาไม่ได้ให้ เราอยู่ตัวอย่างเช่น ฉันแค่จะทำเครื่องหมาย x นั่น ซึ่งจะช่วยขับรถกลับบ้าน สัญลักษณ์หมายถึงที่อยู่ ดังนั้นในครั้งแรกที่ทุกคน ไปกับบรรทัดแรก บางชุด x ของ five-- บาง ช่องเสียบแบบสุ่มในหน่วยความจำ ตัวชี้ดาว Int เท่ากับ ไปยังที่อยู่ของ x ใช่มั้ย? ตัวชี้ดาว Int สร้าง บล็อกนี้เรียกว่าตัวชี้ และกำหนดไปที่ที่อยู่ของ x ฉันกลัวที่เครื่องหมาย ตอนนี้สิ่งที่เรากำลังทำคือการที่เราบอกว่า ตกลง dereference ตัวชี้ของเรา ดังนั้นเราจะไปตกลงสิ่งที่อยู่ในตัวชี้ของเราหรือไม่ มันเป็นเครื่องหมาย x ไปที่เครื่องหมาย x และกำหนดมัน ดังนั้นตอนนี้เครื่องหมาย x เป็นไปได้ 35 ดังนั้นโดยทั่วไปเมื่อคุณอยู่ dereferencing คุณไปตกลง คุณกำลังจะได้รับการวาดภาพ ภาพเช่นนี้ คุณกำลังจะได้รับการวาดภาพ ลูกศรของคุณกว่าที่มันเป็น ดังนั้นไปที่ช่องนี้ในหน่วยความจำและทั้ง ให้ฉันที่กลับมาคุ้มค่าหรือเปลี่ยนแปลงมัน ในกรณีนี้เพราะเราอยู่ในที่นี้ ค่าที่เรากำหนดให้เป็น 35 ในขณะที่ที่ผ่านมา หนึ่งถ้าคุณสังเกตเห็นเรา ได้รับการกำหนดสิ่งที่เป็น ที่นี่เพื่ออะไร ดังนั้นพวกเขาจึงมีตารางนี้น่ากลัว มันไม่ใช่ว่าไม่ดี พวกคุณทำงานกับมัน ฉันจะวาดมันออกมาบนกระดาน เรากำลังจะไปกรอกข้อมูลเข้าด้วยกัน, OK? เพื่อคว้ากระดาษบางคว้า, คนที่เริ่มต้นการทำงาน ฉันจะได้รับ ชิ้นใหญ่ของชอล์ก เพราะมันเป็นไปได้มาก ตกลง ศาสตราจารย์: OK เริ่มต้นให้กับแถวแรก เราจะเริ่มต้นมีแล้วพวกคุณ อาจจะสามารถทำงานผ่านบางมากขึ้น ตกลง เท่ากับ b คูณคดังนั้นสิ่งที่เป็น? มันไม่ใช่คำถามเคล็ดลับฉันสัญญา นักเรียน: 4 ครั้ง 5 ศาสตราจารย์: 4 ครั้ง 5 20 ดังนั้นสิ่งที่ B? นักเรียน: 4 ศาสตราจารย์: และค? นักเรียน: 5 ศาสตราจารย์: 5 แล้วนี้เป็นเพียงการไป ได้รับเครื่องหมาย, เครื่องหมาย B, เครื่องหมายคใช่มั้ย? ไม่เลว มันเป็นเรื่องง่ายพอ ตกลง ดังนั้นหนึ่งต่อไป เท่ากับครั้งคในกรณีที่ ใครที่ไม่คุ้นเคยกับที่ ทุกคนคุ้นเคย กับเวลาเท่ากับ? ตกลงทั้งหมดนี้ means-- นี้ ชวเลขสำหรับเท่ากับครั้งค นอกจากนี้คุณยังสามารถทำมันได้กับส่วน ด้วยนอกจากนี้ยังมีการลบ ที่คุณสามารถทำได้เท่ากับหรือบวกเท่ากับค หมายความว่าเท่ากับบวก c ลบเท่ากับ คจะเท่ากับลบค มันเป็นเพียงน้ำตาล syntactic ดังนั้นในกรณีนี้จะมีค่าเท่ากับ ครั้งคจะให้เราอะไร? อีกครั้งไม่ใช่คำถามเคล็ดลับ นักเรียน: 100 ศาสตราจารย์: 100 ไม่อะไรเปลี่ยน? เลขที่ บางทีในที่สุดผมก็จะได้รับ ดีกว่าที่เครื่องหมายของฉัน นักเรียน: OK ขออภัยคุณไม่ได้รับ 100? ศาสตราจารย์: OK ดังนั้นเท่ากับ ครั้งคดังนั้นครั้งค นักเรียน: โอ้คุณกำลังใช้ สำหรับ previous-- ศาสตราจารย์: ใช่ ดังนั้นเหล่านี้เป็นค่าล่าสุดของเรา เหล่านี้เป็นสิ่งที่คุณควรจะเป็น ใช้ในขณะที่เราย้ายลง, ตกลง ดังนั้นขคือการเปลี่ยนแปลงสิ่งเดียวใช่มั้ย? ดังนั้นขอให้กรอกข้อมูลลงในทุกอย่างอื่น บีบีเป็นสิ่งที่เป็นไปได้? ที่จะเป็นหรือไม่เป็น ดังนั้นสิ่งที่จะทำเช่นนี้? ดาวต่อปีทำคืออะไร? นักเรียน: รหัสไปยังสถานที่ของปี นักเรียน: ไม่ไม่มาก ดังนั้นนี่คือการอ้างอิง D นักเรียนดังนั้นขคือค่ามือของปี ศาสตราจารย์: ใช่ดังนั้นต่อปีเป็น ที่อยู่ของใช่มั้ย? จึงบอกว่าการเดินทางไปยังที่ที่เป็น การจัดเก็บและให้ค่าที่ ดังนั้นสิ่งที่เป็น B? นักเรียน: 100 ศาสตราจารย์: 100 สมบูรณ์ ตกลงให้เครื่องคอมพิวเตอร์เป็นสิ่งที่เปลี่ยนแปลง ทุกสิ่งทุกอย่างยังคงเหมือนเดิม สิ่งที่เป็นเครื่องคอมพิวเตอร์จะเป็นอย่างไร ที่ได้รับมอบหมายอย่างง่าย คอมพิวเตอร์จะเท่ากับปีและสิ่งที่เป็นต่อปี? นักเรียน: สัญลักษณ์ ศาสตราจารย์เพอร์เฟ ตอนนี้เราได้รับที่น่าสนใจ ตกลงขอแบ่งคนนี้ลง ประการแรกสิ่งที่ b คูณคเพราะนั่นคือ ส่วนที่ง่ายของคนนี้ใช่มั้ย? ครั้ง b, c เป็นเท่าไหร่ นักเรียน: 500 ศาสตราจารย์: ใช่ดังนั้น สิ่งที่คนนี้ทำ ถ้าหากมันเป็นดาว PB สิ่งที่เปลี่ยนแปลง? นักเรียน: มีอะไรในยกกำลัง ศาสตราจารย์: มีอะไรในข? นักเรียน: มีอะไรในพื้นที่ PB ที่จะชี้ไปที่ ศาสตราจารย์: และ PB ชี้ to-- นักเรียน: B. ศาสตราจารย์: B. ดังนั้นเพียง การเปลี่ยนแปลงสิ่งที่เป็นขขวา ดังนั้น b คูณ C, 500 นั่นคือสิ่งที่เปลี่ยนแปลงในขณะนี้ เย็น น่ารัก พวกคุณจะทำดี สงวนทำลายคนนี้ลง C มีการเปลี่ยนแปลงใช่มั้ย? เพื่อให้เราสามารถกรอกข้อมูลลงในทุกอย่างอื่น ลองมาดูกัน ตกลง เรารู้ว่า C เป็นไปได้ ผลิตภัณฑ์ของตัวเลขสองใช่มั้ย? สิ่งที่ตัวเลขสอง แต่? นักเรียน: A และ C? ศาสตราจารย์ดังนั้นเป็น ที่เหมาะสมสำหรับคนแรก ดังนั้นเรา d อ้างอิง P ของใช่มั้ย? P ของจุดที่จะทำให้เรารู้ว่า นี้เป็นไปได้ 100 ครั้งอะไร? ครั้งสิ่งที่ไม่จุดพีซีไปยัง? จุดที่ต้อง ดังนั้น 100 ครั้ง 100 10,000 ไม่ว่าจะทำให้ความรู้สึก? เย็น หน้าแรกยืดผู้ชายแถวสุดท้าย ตกลง มีการเปลี่ยนแปลงอะไรที่นี่? นักเรียน: A. ศาสตราจารย์: A. สมบูรณ์แบบดังนั้น ทุกอย่างอื่นสามารถอยู่เดียวกัน ตกลง และสิ่งที่เป็น? ดังนั้นจึงเป็นสิ่งที่ครั้ง? นี่คือ PB ดาว ดังนั้น PB ดาวหมายความว่านี่คือ PB, PB จุดข นักเรียน: 500 ศาสตราจารย์: 500 ดังนั้นเราจึงมี 500 ครั้ง 100 นั่นคือ 50,000 ต๊าย! มองไปที่ว่า นักเรียน: ทำไมเรามี & C สำหรับ last-- ศาสตราจารย์: ขออภัย นักเรียน: โอ้, OK ศาสตราจารย์: ฉันไม่ดี จำนวนมากของการเขียน ทุกคนที่ดี? ไม่ได้เลวร้ายเกินไปใช่มั้ย? ใช้เวลาเพียงเล็กน้อย ในขณะที่การทำงานผ่าน ถ้าคุณทำลายมันลง เข้าใจในสิ่งที่แต่ละส่วน จะหมาย to-- เป็น กับทุกสิ่งที่มัน, yes-- ทำลายมันลงไปเล็ก ๆ น้อย ๆ ปัญหาแล้ว recombine, และคุณสามารถทำบางสิ่งที่น่ากลัว มีคำตอบมี แต่เราทำอย่างนั้น คำนวณตัวชี้ อา มือของฉันเป็นจั๊วะทั้งหมด ดังนั้นการเพิ่มหรือลบ int ปรับตัวชี้ โดยขนาดของประเภทของตัวชี้ โปรดจำไว้ว่าทุกชนิด มีขนาดแตกต่างกันอย่างไร ดังนั้นเหมือนคู่หรือยาวยาว แปดและ int สี่ แต่ถ่านเป็นหนึ่ง ดังนั้นสิ่งที่คุณต้องการจะทำ เท่าไหร่สิ่งหนึ่งที่ต้องจำไว้ เป็นเพียงที่เท่าไหร่ของคุณ ค่าตัวชี้จริงการเปลี่ยนแปลง จะขึ้นอยู่กับ ประเภทของตัวชี้จะเป็น ทุกคนที่ดีกับเรื่องนี้? ผมสามารถลบมันได้หรือไม่ เราดีหรือไม่? น่ากลัว ดังนั้นหากเรามีตัวชี้บางอย่าง that-- นี้จะ be-- ฉัน จะทำให้มันชี้ int มันเก็บนี้ ถ้าคุณจะบอกว่าตัวชี้ บวกหนึ่งสิ่งที่มันจะทำ คือมันจะไปปรับปรุง โดยขนาดของ int เพราะนั่นคือ ประเภทของตัวชี้จะเป็น ด้วย C ทุกอย่างเป็น ที่เข้มงวดมากและควบคุม ตัวชี้ int จะอัปเดตโดย จำนวนของพื้นที่ที่ int จะใช้เวลา int สี่ไบต์ ดังนั้นสิ่งนี้จะกลายเป็น? คุณเพียงแค่การเพิ่มสี่บนนี้ ตอนนี้ตัวชี้ของคุณจะ be-- ตกลง ดังนั้นถ้ามันเป็นถ่านและเราได้ชี้ บวกหนึ่งสิ่งที่มันจะเป็นตอนนี้หรือไม่ ถ้า started-- แกล้งเรา started-- ตอนนี้มันเป็น 0x08 ตอนนี้ขอให้พูดว่านี่คือ ถ่านชี้และเราได้เพิ่มหนึ่ง อะไรมันจะเปลี่ยนไป? วิธีการหลายไบต์ถ่านคืออะไร? ผู้ชม: หนึ่ง ลำโพง 1: หนึ่ง ผู้ชม: ดังนั้น 0x09 ลำโพง 1: ดังนั้นมันจะเก้า ดังนั้นสิ่งเดียวที่ต้องจำ เพียงเมื่อคุณเพิ่มหนึ่งก็ไม่ได้ เพิ่มหนึ่งเว้นแต่จะเป็นถ่าน มันเพิ่มจำนวน ไบต์ชนิดว่ามันเป็นที่ ซึ่งเป็นเหตุผลที่เรามี สมการนี​​้ขึ้นที่นี่ ดังนั้นจึงเป็นครั้ง int ขนาด ประเภทของตัวชี้ ดังนั้นเราจึงมีตัวอย่างที่นี่ และได้รับมอบหมายให้ว่าค่า, 0x4, เมื่อเราได้และบวกเท่ากับหนึ่ง อะไรอยู่ในนั้นมีอะไร ใน x, ไม่เปลี่ยนแปลง สิ่งที่ไม่เปลี่ยนแปลงเป็นสิ่งที่อยู่ในและ ที่อยู่และเก็บไว้ในการปรับปรุงโดยสี่ เพราะมีสี่ไบต์ใน int และเป็นตัวชี้ int สิทธิ์ทั้งหมด ดังนั้นตอนนี้เรามีการออกกำลังกายอื่น ดังนั้นคำถามคือสิ่งที่จะพิมพ์ ความคิดใด? ผู้ชม: จำนวนของ ตัวอักษรในแมวมีความสุข? ลำโพง 1: แน่นอน ดังนั้นเช่นเดียวกับสายของคุณ ทุกคนได้รับที่? เราต้องการที่จะเดินผ่านมันได้หรือไม่ ใช่ตกลง ดังนั้นสิ่งที่เรามีตรงนี้ฉัน เช่นนี้มากขึ้น ฉันจะได้ไม่ต้อง [ไม่ได้ยิน] ขัน ดังนั้นเราจึงมีสตริงของเราที่นี่แมวมีความสุข น่ารัก เรามีบางอย่างที่เคาน์เตอร์ เรากำลังติดตามความเคลื่อนไหวของ ดังนั้นเราจึงมีบางตัวชี้ถ่าน * ที่เพิ่งถูกตั้งค่าเท่ากับ str สิ่งนี้จะทำคือมัน การกำหนดตัวชี้บางอย่าง ที่จุดเริ่มต้นของสตริงของคุณ เพราะผมมั่นใจว่ามัน ถูกกล่าวถึงในการบรรยาย เราได้ให้พวกคุณนี้ ชนิดของข้อมูลที่เรียกว่าสตริง แต่สตริงจริงๆเป็นเพียง อาเรย์เเล้เช่น char * มันเป็นตัวชี้ไปยังพวงของตัวละคร ที่มีความต่อเนื่องกันในหน่วยความจำ ดังนั้นเพียงแค่นี้ชุดมัน เท่ากับสตริงใด ๆ ที่เป็น ระบุที่ ตัวอักษรตัวแรกของมันคือ ดังนั้นนี่เป็นเพียงการตั้งค่าบางจุด เท่ากับเริ่มต้นของสตริง ทุกคนที่ดีมี? เย็น ดังนั้นนี่คือ dereferencing ชี้ของเรา ดังนั้นมันจริงจะ ให้เราค่าบางอย่างในที่นี่ ในสายของเราที่เรากำลังพูดถึง และเรากำลังจะบอกว่าตราบใดที่ มันไม่เป็นโมฆะเทอร์มิ เพื่อให้ไปจนกว่าคุณจะได้รับ ที่จุดสิ้นสุดของสตริง การปรับปรุงตัวชี้ของคุณโดยหนึ่ง ดังนั้น R ก็จริงจะปรับปรุงโดยหนึ่ง ในแต่ละครั้งเพราะเป็นถ่าน, ถ่าน * ดังนั้นมันจะผ่านไป มันจะปรับปรุง ดังนั้นครั้งแรกที่ทำงาน มันเป็นไปได้ที่นี่ที่ชั่วโมง มันจะปรับปรุง มันจะเป็น มันจะเป็น P, Y, และอื่น ๆ และอื่น ๆ เราจะปรับปรุงเคาน์เตอร์ เมื่อมันมาถึงจุดสิ้นสุดมัน เพียงแค่พิมพ์ว่าไกลก็ยังมีอากาศ ใช่ ผู้ชม: ดังนั้นมันนับ พื้นที่ที่เป็นหนึ่งใช่มั้ย? ตกลง ลำโพง 1: คิดอย่างนั้น นั่นคือคำถามที่ ผู้ชม: [ไม่ได้ยิน] ลำโพง 1: ไม่ต้องกังวล นี้ฉันจะทำอย่างนั้น ทั้งหมดขวาดังนั้นสิ่งหนึ่งที่ฉัน เข้าใจว่ามีอาร์เรย์ คุณยังสามารถรักษามันเป็น ตัวชี้เพราะอาร์เรย์เป็นเพียง จุดอย่างต่อเนื่องของหน่วยความจำ เพื่อให้คุณสามารถรักษาได้ด้วยวิธีเดียวกัน คุณสามารถจัดการกับพวกเขา กับคำแนะนำด้วย ดังนั้นแทนที่จะทำในเรื่องนี้ กรณีสิ่งที่คล้าย จะเป็นอาร์เรย์ 0 เท่ากับ 1 แต่ในทางเดียวกันว่า สตริงจะถูกกำหนด โดยเริ่มจากที่ ตัวละครแรกคือ อาร์เรย์จะถูกกำหนดโดย ที่องค์ประกอบแรกของมันคือ เพราะเรารู้ว่าเราไม่ รับประกันว่าสิ่งเหล่านี้ เป็นไปได้อย่างต่อเนื่อง บล็อกของหน่วยความจำ นั่นคือสิ่งที่ช่วยให้เราสามารถทำเช่นนี้ เรารู้ว่าพวกเขากำลังอย่างต่อเนื่อง บล็อกของหน่วยความจำ ดังนั้นในกรณีนี้โดย dereferencing เพียงอาร์เรย์ที่บอกเรา ตกลงไปที่จุดเริ่มต้นของ อาเรย์ซึ่งเป็นที่นี่ เพื่อให้คุณสามารถตั้งค่าเท่ากับหนึ่ง และในกรณีนี้สิ่งที่อาเรย์ของคุณ ชนิดคือเมื่อคุณอัปเดตได้โดยหนึ่ง ที่เช่นเดียวกับการปรับปรุง ไปยังหน้าถัดไป คุณสามารถทำเช่นนั้นเพราะคุณ รู้ว่าสิ่งที่อยู่ในอาเรย์ของคุณ ดังนั้นจึงรู้วิธีมากที่จะ ปรับปรุงตัวชี้ของคุณโดย สิ่งที่อยู่ในการปรับปรุงเพื่อให้ ว่าคุณจะอยู่ที่ช่องถัดไป ดังนั้นนี่เป็นเพียงวิธีที่แตกต่างกัน การเขียนอาร์เรย์ 0 เท่ากับ 1, อาร์เรย์ 1 เท่ากับ 2 อาร์เรย์ วงเล็บ 2 เท่ากับ 3 มันเป็นเพียงวิธีการที่จะคิดเกี่ยวกับมันอีก เพราะพวกเขามีอย่างต่อเนื่อง บล็อกในหน่วยความจำ คุณสามารถดูพวกเขาทั้งสอง โดยอาร์เรย์สัญลักษณ์โดย ซึ่งผมเอง หา easier-- แต่อาจจะ คุณจะต้องจัดการกับมัน อย่างเคร่งครัดโดยอยู่หน่วยความจำ และนี่คือวิธีที่คุณจะทำอย่างนั้น ชนิดของอื่น ๆ อีกมากมายเช่น สิ่งดีๆที่คุณสามารถทำ เมื่อเทียบกับสิ่งที่อาจจะไม่ได้คุณ จริงที่เกิดขึ้นในการดำเนินการ ผมใช้มันใน 61 พวกคุณอาจไม่จำเป็นต้อง กังวลเกี่ยวกับมันมากเกินไป แต่ถ้าคุณสนใจ ใช้เวลา 61 ปีต่อไป เราอยู่ในพวกยืดบ้าน ฉันรู้ว่ามันยาว หน่วยความจำแบบไดนามิก Allocation-- เพื่อให้เรารู้ว่า ของสิ่งที่เมื่อเราได้พูดคุยในช่วง ส่วนแรกของเราด้วยกัน เรามองที่แลกเปลี่ยน ฟังก์ชั่นที่มันเป็น นอกขอบเขตของฟังก์ชั่นหลักของเรา และเราก็ผ่านในค่าเหล่านี้ ที่เป็นสำเนาได้อย่างมีประสิทธิภาพ และเมื่อเสร็จสิ้นการแลกเปลี่ยน รันก็เหลือเพียงกอง โปรดจำไว้ว่าเรามี กองกรอบสำหรับการแลกเปลี่ยน มันใบและผู้ที่ ค่าออกกับมัน และพวกเขาก็หายไป เราไม่สามารถทำอะไร กับพวกเขาและเราก็เศร้า เพราะเราไม่สามารถเปลี่ยนค่านิยมของเรา แต่ด้วย C ที่ผมกล่าวถึงคุณ มีจำนวนมากที่มีอำนาจเหนือหน่วยความจำ ดังนั้นสิ่งที่คุณสามารถทำได้คือการที่คุณสามารถ จัดสรรสิ่งที่อยู่ในกองที่นี่ ที่จะอยู่ที่นั่นจนกระทั่ง คุณบอกพวกเขาเป็นอย่างอื่น พวกเขาเหมือนเด็กที่ดี พวกเขาอยู่ที่นั่น พวกเขาไม่ได้ออกจาก พวกเขาจะอยู่ที่นั่นจนกว่าคุณจะ เหมือนตกลงคุณสามารถไปออกไป ในขณะที่สิ่งที่อยู่ในกอง who-- พวกเขากำลังเหมือนเด็กซน พวกเขาก็จะวิ่งหนีเมื่อคุณต้องการ ที่จะมีและพวกเขาก็กำลังไป คุณไม่สามารถรับพวกเขากลับมา ดังนั้นกองเท่าไหร่เราจะ พูดคุยเกี่ยวกับ malloc และฟรีที่ ผมมั่นใจว่าพวกคุณ ได้ยินเกี่ยวกับในการบรรยาย และที่พื้นทาง ที่จะมีข้อมูลถาวรมาก เพื่อให้คุณสามารถเก็บข้อมูล รอบตราบเท่าที่คุณต้องการ Mhm ผู้ชม: คุณสามารถกำหนดกองและสแต็? พวกเขาชอบที่จะนำสิ่งที่? ลำโพง 1: ดังนั้นพวกเขากำลัง โดยทั่วไปพวกเขากำลัง just-- วิธีที่เราดูเพียงแค่ความทรงจำ ดังนั้นกองเป็นเพียงสถานที่ที่ หน่วยความจำมีการจัดสรรแบบไดนามิก ในขณะที่กองหมาย มากขึ้นในกองเฟรม ที่มีศูนย์กลางในการ ฟังก์ชั่นที่มีการทำงานจริง คุณไม่ได้จริงๆมีการควบคุม ความแตกต่างใหญ่คุณมีการควบคุม กว่ากองถ้าคุณต้องการ คุณมีการควบคุมน้อยกว่ากอง สแต็คขึ้นอยู่กับ ฟังก์ชั่นที่กำลังทำงาน และเพื่อที่พวกเขาเป็น วิ่งและว่าสิ่งที่มีการส่งคืน ในขณะที่มีกองเป็น เราจะเห็นคุณสามารถพูดได้ว่า ตกลงผมต้องการค่านี้จะเป็น รอบจนกว่าฉันจะบอกคุณเป็นอย่างอื่น คุณยังไม่ได้รับอนุญาตให้กำจัดมัน คุณไม่ได้รับอนุญาตที่จะแทนที่มัน คุณกำลังจะให้มันไปรอบ ๆ ตราบเท่าที่ผมบอกคุณ คุณจะได้รับที่จะเป็นเจ้านายในกอง, ในขณะที่ stack-- บางทีถ้าคุณ เช่น finagle วิธีการของคุณ คุณสามารถเป็นเจ้านาย แต่ไม่มาก และเป็นจริงเพียงแค่ความทรงจำ มันเป็นวิธีการที่แตกต่างกันเพียง การอ้างถึงหน่วยความจำ เย็น ดังนั้นด้วยที่วิธีการ ควบคุมหน่วยความจำของคุณ มันเป็นกับ malloc ซึ่ง คุณกำลังจะได้รับการใช้งาน ดังนั้นจึงเป็นเพียงระยะสั้น สำหรับการจัดสรรหน่วยความจำ นั่นคือทั้งหมดที่มันเป็น มีพวงของเย็นอื่น ๆ เป็น ฟังก์ชั่นที่มี alloc ในตอนท้าย และพวกเขายืนสำหรับสิ่งที่แตกต่างกัน ดังนั้นเมื่อคุณจำเป็นต้องมีการจัดเก็บข้อมูลที่ต้องการ จะอยู่ได้นานกว่าการทำงานปัจจุบันของคุณเพื่อ ว่าเมื่อปัจจุบันของคุณ ฟังก์ชั่นวิ่งออกไป คุณยังมีข้อมูลที่คุณ ได้จากว่าคุณต้องการที่จะใช้ malloc ที่จะเริ่มต้นมันในกอง และเช่นเดียวกับที่ผมพูดและให้ บอกว่าคุณจะให้มันมี จนกว่าคุณจะบอกได้ว่ามันเป็นอย่างอื่น ซึ่งเป็นสิ่งที่สำคัญที่นี่ ดังนั้นสิ่งหนึ่งที่จะสังเกตเห็นและ ที่มักจะเป็นสิ่งที่สำคัญจริงๆ คือที่นี้ sizeof เป็นซุปเปอร์ประโยชน์ที่จะใช้ เพราะขึ้นอยู่กับชนิด ของเครื่องที่คุณกำลังทำงาน มันอาจจะมีจำนวนแตกต่างกัน หน่วยความจำที่จะใช้เวลา ดังนั้นคุณจึงต้องการที่จะใช้ขนาดของสิ่งที่ ที่คุณไม่ได้ขึ้นอยู่กับเครื่อง, เพื่อให้รหัสของคุณจะ ทำงานบนเครื่องใด และนี่เป็นเพียงส่วนหนึ่ง ในการเขียนโค้ดที่ดี หากการทำงานในหนึ่งเครื่อง, แต่ไม่ใด ๆ ของผู้อื่น ว่ามีประโยชน์เป็นโปรแกรมของคุณ? ดังนั้นคุณจึงต้องการที่จะ ตรวจสอบให้แน่ใจและใช้ sizeof ผู้ชม: เพ​​ื่อให้เป็นที่ชอบ ขนาด 10 นิ้ว [ไม่ได้ยิน] ลำโพง 1: นี่คือขนาดของ 10 ints ใช่ ดังนั้นขนาดของ ints จะกลับมา เท่าไหร่หนึ่ง int ใช้ หรือขนาดของถ่านวิธี เท่าไหร่หนึ่งถ่านใช้ แล้วกี่บล็อก คุณที่ต้องการได้หรือไม่ ดังนั้นในกรณีนี้เราต้องการบางสิ่งบางอย่าง ที่เราสามารถจัดเก็บ 10 ints เพื่อ และมันจะทำงานโดยไม่คำนึงถึง ของเครื่องซึ่งเป็นเย็น ดังนั้นวิธีที่หลายไบต์จะ ที่จริงให้คุณ? คณิตศาสตร์ด่วน ผู้ชม: 40 ลำโพง 1: 40 เผง ดังนั้นอีกสิ่งที่ใหญ่ ตัวชี้หรือ malloc สามารถกลับ null ดังนั้นอีกครั้งควรตรวจสอบให้ ดูว่าจะกลับมาเป็นโมฆะ ก่อนที่คุณจะพยายามทำอะไรกับมัน ถ้าคุณพยายามและ dereference ชี้ตอนนี้ ก็แค่ไป Segfault เพราะคุณไปและพยายาม สัมผัส null เมื่อคุณไม่ควรจะมี ดังนั้นควรตรวจสอบสำหรับ null อีกครั้งที่คุณสามารถทำได้ มันอาจจะกลับมาเป็นโมฆะ มันจะกลับ null ถ้าคุณทั้งสอง ออกจากพื้นที่หรือด้วยเหตุผลใด มันวิ่งเข้าไปในข้อผิดพลาดหน่วยความจำบาง มันบางครั้งก็กลับ null ดังนั้นคุณก็ต้องตรวจสอบมัน ที่สไลด์ทั้งหมดนี้จะบอกว่า และแล้วสิ่งที่เรามี นี่คือการเรียกร้องที่จะเป็นอิสระ ดังนั้นในทางเดียวกันว่าถ้าคุณ เปิดแฟ้มที่คุณต้องปิดไฟล์ ถ้าคุณหน่วยความจำ malloc คุณ คุณต้องฟรีหน่วยความจำที่ และพวกคุณจะได้รับ ที่จะทำสิ่งที่เจ๋งจริงๆ และมีโปรแกรมที่คุณสามารถใช้กับ ดูว่าคุณเคยรั่วไหลของหน่วยความจำ แต่คุณไม่ต้องการที่จะรั่วไหลของหน่วยความจำ มันไม่ดีจริงๆ เพียงแค่สิ่งที่เลอะ มันไม่ดีที่จะทำเช่นเดียวกับการเขียนโปรแกรม ที่ชาญฉลาดสำหรับประสิทธิภาพในการออกแบบ แต่มันก็เป็นเพียงแค่ชนิด ของไม่ดีสำหรับคอมพิวเตอร์ของคุณ ดังนั้นเพียงแค่สิ่งที่ฟรี เมื่อคุณ malloc พวกเขา พวกคุณเห็น symmetries ที่นี่ ง่ายสุด เพียงแค่ฟรีแล้ว สิ่งที่ตัวชี้ของคุณ สิ่งที่ชื่อของ ตัวชี้ของคุณและมัน จะดูแลแก้มันสำหรับคุณ เย็น แล้วเรามีนี้ ดังนั้นเราจึงกำลังจะ เดินผ่านโปรแกรมนี้ แล้วพวกคุณทำ ดังนั้น [ไม่ได้ยิน] หลักเพียง ดังนั้นเราจึงมีบางตัวชี้ int * ดังนั้นเราจึงมีตัวชี้ ที่จะถือ ints และวิธีการที่หลาย ints มันไปถือ? เพียงหนึ่ง ขนาดของ int เราตรวจสอบเพื่อดูว่า ชี้เป็นโมฆะเพราะมัน คือเราอยากจะบอกว่าไม่ได้ทำอะไร มันไม่ดี ดังนั้นเราจึงพิมพ์ข้อผิดพลาดบางส่วนออกจาก หน่วยความจำส่วนใหญ่มักจะกลับมาที่ 1 เป็นพวกคุณจะใช้ในการ และจากนั้นเราได้ที่นี่เรา dereference ตัวชี้ของเรา ดังนั้นนั่นหมายความว่าเรากำลังจะไปเก็บ บางสิ่งบางอย่างที่สถานที่ให้กับเรา int * ตัวชี้หรือ malloc กลับ ที่อยู่ของสถ​​านที่ที่กำหนดไว้นี้ หน่วยความจำสำหรับคุณ ดังนั้นมันเป็นพื้น ให้คุณ like-- ถ้าคุณ คิดเกี่ยวกับพวงของ บ้านในละแวกใกล้เคียง ที่คุณต้องการที่จะนำ ในเฟอร์นิเจอร์ของคุณ malloc ก็เหมือนตกลงคุณจะได้รับ เพื่อไปที่บ้านสาม และมันจะช่วยให้คุณ ที่อยู่ของบ้านสาม ดังนั้นตอนนี้ในขณะนี้ ร้านค้าตัวชี้ที่อยู่ เก็บที่อยู่ของบ้านของคุณ PTR * หมายความว่าตกลงฉันที่บ้านของฉัน เย็น ฉันต้องได้รับจำนวนเต็มบาง ดังนั้นที่คุณถามหาใครสักคน เพื่อให้เฟอร์นิเจอร์ตอนนี้ เพื่อให้คุณได้ int บาง และมันทำให้มันอยู่ในตัวชี้ของคุณ ที่มันชี้ไปที่ และจากนั้นก็เพียงแค่พิมพ์ ออกคุณเข้ามาทุกที่ และอีกครั้งอ้างอิง ดังนั้นนี่เป็นเหมือนที่คุณไปนี้ ที่อยู่และที่คุณเห็นสิ่งที่อยู่ที่นั่น เย็น? แล้วแน่นอนว่าเราเป็นอิสระตัวชี้ของเรา อย่าลืมที่จะปลดปล่อยตัวชี้ของคุณ อย่าลืมที่จะตรวจสอบเป็นโมฆะ อย่าลืมที่จะปลดปล่อยตัวชี้ของคุณ คุณมีสองสิ่งที่คุณจำได้จาก นี้หรือที่คุณควรจำไว้ ใช่ ผู้ชม: สิ่งที่ [ไม่ได้ยิน] เช่นนั้น char * S เรามาว่าไม่เคยเป็นอิสระเหล่านั้นหรือไม่ ลำโพง 1: หืม? ผู้ชม: เป็นคนที่ชอบสตริง? คุณบอกว่าสตริง เช่นเดียวกับถ่าน s * ใช่มั้ย? ดังนั้นทำไมเราไม่ฟรีสตริง? ลำโพงที่ 1: คุณเท่านั้นที่จะ ฟรีหากคุณกำลัง mallocing ผู้ชม: โอ้ถ้าคุณกำลัง mallocing ลำโพง 1: ดังนั้น malloc และเป็นอิสระเป็นสองสิ่งที่ ที่คุณควรมีร่วมกัน ฉเปิดฉใกล้สองสิ่ง คุณควรจะมีร่วมกัน ในทั้งสองกรณีผู้ตรวจสอบเป็นโมฆะ ใช่ ผู้ชม: ดังนั้นฟรีเป็นเพียง ช่วยให้สิ่งอื่น จะถูกเก็บไว้ที่นั่นหลังจากที่ โปรแกรมนี้ได้ใช้มันได้หรือไม่ ลำโพง 1: มันก็แค่บอกว่า ตกลงฉันทำกับนี้ คุณไม่จำเป็นต้องที่จะให้มันไปรอบ ๆ มิฉะนั้นคอมพิวเตอร์ของคุณจะ เช่นเดียวกับพยายามให้มันมี แล้วคุณ can't-- มันวิ่ง เป็นปัญหาหน่วยความจำในภายหลัง คุณเคยต้องการที่จะเป็นอิสระมันเพราะ มันบอกเครื่องคอมพิวเตอร์ของคุณตกลงฉัน ทำกับจุดของหน่วยความจำนี้ คุณสามารถมีได้กลับมา สำหรับผมที่จะใช้ในภายหลัง เย็น? ใช่ ผู้ชม: ดังนั้นเราจึงใช้% d เพียง เพราะสองครั้งที่กลับมา หรือทำไมเท่าไหร่ [ไม่ได้ยิน] ผู้ชม: คุณสามารถใช้% i? ลำโพง 1: คุณสามารถใช้% ฉัน คำถามใด ๆ นาทีสุดท้าย? เอาเลย ผู้ชม: ฉันเพียงแค่มีคำถามอย่างรวดเร็ว ดังนั้นตัวแปร PTR, that's-- เหมือนมี int PTR * = malloc, ที่เพียงแค่บอกว่ามันเป็น ชี้ไปที่สถานที่ใน memory-- ลำโพง 1: คุณต้องการ [ไม่ได้ยิน] ผู้ชม: --that เป็น ขนาดเเล้ไม่มีก็ OK แต่มันเป็นเพียงการชี้ไปที่สถานที่ใน หน่วยความจำที่เช่นเดียวกับสี่ไบต์ ลำโพง 1: ขวา ดังนั้น malloc ขนาดของ int กล่าวว่า ตกลงผมจะไปทำงานออก หาสี่ไบต์ของหน่วยความจำสำหรับคุณ เมื่อพบว่าสี่ ไบต์ของหน่วยความจำ ช่วยให้คุณสำรองอยู่ ในการที่จะเริ่มต้น และนั่นคือสิ่งที่เก็บไว้ ในตัวชี้หรือ PTR ดี พวกคุณดูสับสนน้อยกว่ามากที่สุด คนเมื่อฉันพูดคุยเกี่ยวกับตัวชี้ ดังนั้นฉันรู้สึกที่ดีงามได้ในขณะนี้ สิทธิ์ทั้งหมด และเช่นเคยที่พวกคุณควรจะมี อากาศเกรด pset2 ของคุณตอนนี้ ฉันรู้ว่ามีบาง wonky สิ่งที่จะกล่าวว่าสูตรไม่ถูกต้อง หรือสิ่งที่ หากคุณได้รับที่ทั้งหมด เกรดที่ถูกต้องในด้านของฉัน เพื่อให้สามารถส่งคุณ ภาพหน้าจอของการเรียนของคุณ เพียงแค่แจ้งให้เราทราบเช่นกันถ้าคุณอยู่ หายไปเกรดใด ๆ หรือบางสิ่งบางอย่าง ดูเหมือนจะไม่ได้ทำให้ความรู้สึก มาหาฉัน ฉันได้รับสุดภูมิใจในตัวคุณ คนอยู่แล้วเพื่อให้มันขึ้น และมีส่วนที่เหลือที่ดีของสัปดาห์ของคุณ ฉันแน่ใจว่าฉันจะเห็นบางส่วน ของคุณที่เวลาทำงาน