DOUG LLOYD: เมื่อคุณเริ่มต้น การทำงานร่วมกับฟังก์ชั่น อีกสิ่งหนึ่งที่เป็นไปได้ที่จะกลายเป็น สำคัญมากที่จะเข้าใจ ซึ่งเป็นแนวคิดของขอบเขตตัวแปร ดังนั้นขอบเขตเป็น ลักษณะของตัวแปร ที่กำหนดจากการที่ฟังก์ชั่น ตัวแปรที่สามารถเข้าถึงได้ มีสองขอบเขตหลักใน C มี ตัวแปรท้องถิ่นและตัวแปรทั่วโลก ตอนนี้ตัวแปรท้องถิ่นเท่านั้นที่สามารถ เข้าถึงฟังก์ชั่นภายใน ในการที่พวกเขากำลังสร้าง พวกเขาไม่สามารถเข้าถึงได้โดยทุกคนอื่น ๆ ฟังก์ชั่นที่มีอยู่ในโปรแกรมของคุณ เพียงฟังก์ชั่นใน ที่มันถูกสร้างขึ้น ตัวแปรทั่วโลกบน มืออื่น ๆ ที่สามารถเข้าถึงได้ โดยฟังก์ชั่นใด ๆ ในโปรแกรม และเหตุผลที่ว่าเป็น เพราะพวกเขาไม่ได้สร้างขึ้นภายใน โดยเฉพาะอย่างยิ่งของการทำงานใด ๆ เราขอประกาศให้พวกเขาที่ด้านนอกของ ทุกฟังก์ชั่ซึ่ง หมายความว่าทุกฟังก์ชั่นรู้ว่า มันคืออะไรและสามารถเข้าถึงและจัดการกับมัน เพื่อให้ห่างไกลในหลักสูตรที่คุณได้สวย รับเฉพาะการทำงานมาก กับตัวแปรท้องถิ่น นี่คือตัวอย่างของมากมาก ฟังก์ชั่นหลักที่เรียบง่ายและง่ายมาก ฟังก์ชั่นเพิ่มเติมที่เราได้เขียน ในกรณีนี้, x ซึ่ง ฉันได้สีเขียวเพียง เพื่อเน้นบริเวณใกล้เคียงหรือ ขอบเขตของตัวแปรนั้น เป็นท้องถิ่นเพื่อฟังก์ชั่นที่สาม หลักไม่สามารถดู x เลย มันไม่ได้รู้ว่าสิ่งที่มันเป็น ไม่มีฟังก์ชั่นอื่น ๆ ที่ในความเป็นจริงถ้าเรา มีฟังก์ชั่นเพิ่มเติมในที่นี่ อาจจะหมายถึง x ในทำนองเดียวกันผลที่ฉันได้ สีฟ้ามีในท้องถิ่นเท่านั้นที่จะเป็นหลัก เพียง แต่รู้ว่าสิ่งที่สำคัญ ผลตัวแปร สามไม่สามารถใช้งานได้ ตอนนี้ที่ผมกล่าวถึง, ตัวแปรทั่วโลกทำอยู่ ถ้าคุณกำหนดตัวแปรที่ ด้านนอกของฟังก์ชั่นใด ๆ ทุกฟังก์ชั่ใน โปรแกรมที่สามารถเรียกมัน ดังนั้นในกรณีนี้ผมได้เน้นใน สีเขียวประกาศตัวแปรทั่วโลก ในกรณีนี้ เป็นตัวแปรที่ประกาศ เรียกว่าทั่วโลกเพียงเพื่อ เป็นอย่างมากที่ชัดเจนเกี่ยวกับเรื่องนี้ มันเป็นลอยประเภท และผมกำหนดค่า 0.5050 คุณจะสังเกตเห็นว่าในหลักและใน สามผมก็สามารถที่จะอ้างถึงทั่วโลก และในความเป็นจริงถ้าผมไปผ่านทางโปรแกรม ตามที่ระบุสายแรกหลักสาม สามคูณทั่วโลกโดย 3 ซึ่ง ตั้งค่าเป็น 1.5 บางสิ่งบางอย่าง 1.51 หรือสิ่งที่ต้องการและ แล้วที่สำคัญยังพิมพ์ออกค่า ของทั่วโลก ดังนั้นหลักจะไม่พิมพ์ออก 0.5050 มัน จะพิมพ์ออกมาทั่วโลกครั้งที่ 3 1.51 เพื่อให้คุณได้มีการระมัดระวังในการ คุณกำลังทำงานกับตัวแปรทั่วโลก ในขณะที่พวกเขากำลังมีความยืดหยุ่นมากใน ความสามารถในการส่งผ่านข้อมูล รอบเพื่อให้ทุก ฟังก์ชั่นที่สามารถใช้งานได้ ก็ยังสามารถมีบางส่วน ผลกระทบที่เป็นอันตราย หากมีการเปลี่ยนแปลงการทำงาน ค่าของตัวแปร ก่อนที่คุณจะคาดหวังว่ามันจะมีการเปลี่ยนแปลง เรื่องความแตกต่างนี้ทำไม? ทำไมเราสนใจว่าตัวแปรบาง มีในท้องถิ่นและอื่น ๆ ทั่วโลกหรือไม่ ดีส่วนใหญ่ตัวแปรท้องถิ่น ใน C มีสิ่งที่เรียกว่าผ่านค่า เมื่อเราทำการเรียกฟังก์ชั่น นั่นหมายความว่าอย่างไร? ดีเมื่อตัวแปรจะถูกส่ง โดยค่า callee ซึ่ง เป็นวิธีการบอกว่าฟังก์ชั่นอื่น ที่ได้รับตัวแปรที่ ได้รับการส่งผ่านไปในขณะที่ใส่ก็จริง ไม่ได้รับตัวแปรตัวเองว่า ได้รับของตัวเอง สำเนาของมันในการทำงานกับ นี่คือความแตกต่างที่สำคัญจริงๆ เราเพิ่งเห็นที่สองที่ผ่านมา กับตัวแปรที่ทั่วโลก ถ้าเราจัดการกับโลก ตัวแปรหนึ่งในฟังก์ชั่นที่มีผล ในการที่ดำเนินการอย่างใดอย่างหนึ่งฟังก์ชั่น ผ่านไปยังทุกฟังก์ชั่นอื่น ๆ แต่ด้วยตัวแปรท้องถิ่น ที่ไม่เป็นความจริง. ฟังก์ชั่นเมื่อแต่ละคน ได้รับตัวแปรเป็น input ได้รับสำเนาของตัวแปรเหล่านั้น ไม่ตัวแปรของตัวเอง ดังนั้นสิ่งที่เป็นผลข้างเคียงของที่? นั่นหมายความว่าตัวแปรใน โทรฟังก์ชั่นที่ เป็นฟังก์ชั่นการโทรเป็น ไม่เปลี่ยนแปลงจนกว่าคุณจะแทนที่ ยกตัวอย่างเช่นในรหัสนี้ foo จะไม่เปลี่ยนแปลงเลย int foo เท่ากับ 4 โทรสาม ของ foo ภายในของสาม เราจะคาดหวังว่าจะ foo คูณด้วย 3 และกลับ แต่มีจริงไม่มีผลกระทบ ที่นี่ แต่ความแตกต่างที่ลึกซึ้งมาก นี้จะมีผลกระทบที่เราต้องการ คุณเห็นว่าทำไม? เรากำลังเอาชนะฟูหลักในเวลานี้ ดังนั้น int foo เท่ากับ 4 foo เท่ากับ สาม foo เมื่อเราโทรที่ สามได้รับสำเนาของตัวเอง ของ foo สำเนาของตัวเองของ 4 มันบอกว่ากลับมา 4 ครั้งที่ 3 หรืออะไรก็ตาม ตัวแปรที่ได้รับผ่านในครั้งที่ 3 และจากนั้นเรากำหนดผลตอบแทน ค่าของสามเพื่อ foo อีกครั้ง ดังนั้นนี้จริงจะเขียนทับ foo วิธีนี้เป็นวิธีเดียวที่จะทำ นี้กับตัวแปรท้องถิ่น ดังนั้นถ้าเราเพิ่มอีก บรรทัดของรหัสที่นี่ ในตอนท้ายของหลักไป พิมพ์ค่าของ foo ที่ มันจะในความเป็นจริง 12 พิมพ์ออกมา ขอบเขตตัวแปรโดยทั่วไป ไม่มากเกินไปของปัญหา ถ้าคุณชื่อทั้งหมดของคุณ ตัวแปรสิ่งที่แตกต่าง แต่ก็สามารถได้รับชนิดของที่น่ารังเกียจ ถ้าชื่อตัวแปรเดียวกัน ปรากฏในฟังก์ชั่นหลาย ซึ่งจะเกิดขึ้นเป็นจำนวนมาก ถ้าคุณเคยทำผลงานใน โลกแห่งความจริงที่ คุณกำลังทำงานในการทำงานร่วมกัน โปรแกรมและคนที่อยู่ในทีมงานที่แตกต่างกัน จะทำงานร่วมกันในการเขียนเดียวกัน โปรแกรมหรือชุดเดียวกันของโปรแกรม พวกเขามักจะนำมาใช้ตัวแปร ชื่อคนทั่วไปโดยเฉพาะอย่างยิ่ง เช่น x, y, ฉัน j และอื่น ๆ แต่เมื่อมีตัวแปร ชื่อเดียวกันประเด็นขอบเขต จะได้รับเพียงเล็กน้อย trickier ที่จะแยก ตัวอย่างเช่นคุณจะรู้ว่า สิ่งที่จะพิมพ์ออกมา ในตอนท้ายของโปรแกรมนี้โดยเฉพาะหรือไม่ ใช้เวลาสักครู่ หยุดวิดีโอและอ่าน ผ่านโปรแกรมนี้ คุณสามารถดูได้ที่เราด้านบน มีฟังก์ชั่นการประกาศ สำหรับฟังก์ชั่นที่เรียกว่าเพิ่มขึ้น ฟังก์ชั่นที่ใช้เวลาเดียว พารามิเตอร์จำนวนเต็มซึ่งเราเรียก x และมันจะออกผลลัพธ์เป็นจำนวนเต็ม นั่นเป็นชนิดกลับที่จุดเริ่มต้น แล้วเรามีหลักคู่สาย ของรหัสในหลักสุดท้ายที่ เป็นคำสั่งการพิมพ์ และจำไว้ว่าเป็นคำถามที่นี่ สิ่งที่เป็นจริงไปได้ พิมพ์ในตอนท้ายของฟังก์ชั่นนี้หรือไม่? และจากนั้นเราจะมี ความหมายของการเพิ่มขึ้นดังต่อไปนี้ เพื่อใช้นาทีก้าวผ่าน รหัสติดตามสิ่งที่ออก คุณรู้ว่าสิ่งที่จะได้รับการพิมพ์ที่ไม่ ในตอนท้ายของโปรแกรมนี้โดยเฉพาะหรือไม่ ทั้งหมดขวา หวังว่าคุณได้ถ่ายไม่กี่วินาที และพยายามแยกนี้ออก ขอทำมันด้วยกัน. ดังนั้นผมจึงได้เดินออกที่เพิ่มขึ้นของ ประกาศที่ด้านบนมี มันเป็นชนิดของสิ่งที่ทำให้ไขว้เขว มันไม่ได้เป็นตัวแปรของตัวเอง แต่ไม่ได้มีขอบเขตของตัวเอง มันเป็นเพียงฟังก์ชั่น ประกาศแล้วดังนั้นจุดประสงค์ การพยายามที่จะแยกออกว่ามีอะไร ที่เกิดขึ้นในโปรแกรมนี้ เราอาจมีเพียงหลีกเลี่ยงได้ ตอนนี้เรามีในกรณีนี้ เหตุผลที่ปัญหานี้เป็นเรื่องยุ่งยาก เป็นเพราะเรามีตัวแปรท้องถิ่นใน ทั้งหลักและเพิ่มขึ้นแต่ละที่ เรียกว่า x และแน่นอนปมของปัญหานี้คือ พยายามที่จะรู้ทันเหตุการณ์ที่ x ได้รับการเปลี่ยนแปลง และวิธีการที่ไม่ได้รับการเปลี่ยนแปลง ดังนั้นผมจึงได้สีทุกกรณี ของ x ที่ท้องถิ่นเป็นสีแดงเป็นหลัก และฉันได้เช่นสีของทุก x ที่ท้องถิ่นเพื่อเพิ่มสีฟ้า แจ้งให้ทราบว่าในบรรทัดที่สาม ของหลัก, y เท่ากับเพิ่มขึ้น x เพิ่มขึ้นที่ไม่ได้เป็น ผ่านหลัก x หรือ x สีแดง มันได้รับการผ่านสำเนาของมัน และมันเท่านั้นจะได้ทำงานร่วมกับ ว่าสำเนาของมันสีฟ้า x หากคุณคณิตศาสตร์ ความโน้มเอียงที่คุณอาจ มีความคิดแทนนี้เป็น x ย่อย เมตรสำหรับย่อยหลักและ x เพิ่มขึ้นสำหรับฉัน แต่มันเป็นความคิดเดียวกัน ม. x ย่อยหรือสีแดง x ในสไลด์ก่อนหน้านี้ เป็นตัวแปรที่มี local-- เป็นตัวอย่างของ x ค่อนข้างว่า เป็นท้องถิ่นที่จะหลักและย่อยฉัน x หรือ ตัวแปรสีฟ้าในสไลด์ก่อนหน้านี้ กรณีของ x ที่ มีในท้องถิ่นเพื่อเพิ่ม ดังนั้นเป็นคุณสามารถที่จะคิดออกว่า ฟังก์ชั่นนี้พิมพ์ที่สิ้นสุดหรือไม่ ฉันลอยด์ดั๊กและนี่คือ CS50