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