สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายนี้ ฉันต้องการพูดคุยเกี่ยวกับตัวแก้ไข const และวิธีที่เราใช้กับพอยน์เตอร์
เราได้เรียนรู้เกี่ยวกับการบรรยายก่อนหน้านี้อย่างต่อเนื่อง
หมายความว่าคุณไม่สามารถเปลี่ยนค่าของตัวแปรได้ แต่เมื่อเรานำไปใช้กับพอยน์เตอร์หมายความว่าอย่างไร
ดังนั้นเมื่อเราใช้ตัวดัดแปลง const ในตัวแปรหรืออาร์เรย์
มันจะบอกคอมไพเลอร์ว่าเนื้อหาของอาร์เรย์ของตัวแปรจะไม่ถูกเปลี่ยนโดยโปรแกรม
อีกทางเลือกหนึ่งคือการสร้างคำสั่ง define โดยตัวประมวลผลล่วงหน้า แต่ const
มักจะเป็นวิธีที่ดีกว่าในการดำเนินการที่มีประสิทธิภาพมากกว่า
ด้วยพอยน์เตอร์ เราต้องพิจารณาสองสิ่งเมื่อใช้ตัวดัดแปลง const
เรากำลังบอกว่าตัวชี้ไม่สามารถเปลี่ยนได้จริงหรือ?
หรือเรากำลังบอกว่าค่าที่ตัวชี้ชี้ไปไม่สามารถเปลี่ยนแปลงได้?
เพราะอย่าลืมว่าพอยน์เตอร์มีค่าของที่อยู่
และเราอาจไม่ต้องการเปลี่ยนที่อยู่นั้นเลย
หรือเราอาจไม่ต้องการเปลี่ยนค่าที่ชี้ไป
ไม่ว่าในกรณีใด เราต้องเจาะจงในไวยากรณ์ของเรา
ดังนั้น คุณสามารถใช้คีย์เวิร์ด const เมื่อคุณประกาศตัวชี้เพื่อระบุว่าไม่ต้องเปลี่ยนค่าที่ชี้ไป
วิธีที่คุณระบุสิ่งนี้และอีกครั้งเพื่อให้ตัวชี้เป็นค่าเนื่องจากค่ามีที่อยู่
สิ่งที่ชี้ไปคือมูลค่าของที่อยู่นั้น
ถ้าคุณไม่ต้องการให้สิ่งนั้นเปลี่ยนแปลง
คุณจะทำสิ่งนี้
คุณจะบอกว่าเมื่อคุณประกาศตัวชี้ คุณจะใส่เครื่องหมายดอกจันในตัวแก้ไขค่าคงที่ก่อนประเภท
ดังนั้นคุณจะบอกว่าค่าคงที่ไม่ว่าตัวชี้ของคุณจะเป็นตัวชี้ดอกจันก็ตาม
ดังนั้นนี่คือการกำหนดตัวชี้เป็นค่าคงที่ที่ผิดรูปจริง
ๆ
เราไม่สามารถเปลี่ยน 999l ได้
ดังนั้นเราจึงประกาศว่าค่าที่ pvalue ชี้ไปนั้นเป็นค่าคงที่
คอมไพเลอร์จะตรวจสอบคำสั่งใดๆ ที่พยายามแก้ไขค่าที่ pvalue ชี้ไป
และถ้ามีบัดดี้คนใดที่ทำในโปรแกรม มันจะเกิดข้อผิดพลาด
นี่คือไวยากรณ์ สิ่งที่คุณต้องการสังเกตอีกครั้งที่นี่คือ
const คือคำแรก และอยู่ก่อนประเภท
นั่นคือการบอกว่าค่าที่ชี้ไปไม่สามารถเปลี่ยนแปลงได้
ดังนั้น หากคุณพยายามทำสิ่งนี้กับ pvalue คุณลองกำหนดค่าให้กับสิ่งที่ชี้ไปเพราะคุณเห็นตัวดำเนินการทางอ้อมที่นั่น
นั่นหมายความว่าเรากำลังกำหนดค่าให้กับสิ่งที่เรากำลังชี้ไป
ถ้าเราพยายามทำอย่างนั้น
มันจะเกิดข้อผิดพลาดเพราะเราไม่สามารถเปลี่ยนค่านั้นได้
ไม่สามารถเปลี่ยน 999l เป็น 888l ได้
ทีนี้พอยน์เตอร์ไปยังค่าคงที่ล่ะ
และในการประกาศครั้งก่อน เราได้สร้างพอยน์เตอร์ที่ชี้ไปว่าไม่สามารถเปลี่ยนแปลงได้
แต่เรายังคงสามารถเปลี่ยนค่าจริงของตัวแปรที่เราประกาศได้
ดังนั้นเราจึงยังคงสามารถเปลี่ยนค่ายาวได้
เราไม่สามารถเปลี่ยนค่า p ของดาวได้
แต่ค่าที่ยาวไม่ได้ถูกกำหนดให้เป็นค่าคงที่ แต่มันถูกกำหนดให้เป็นค่าที่ยาวเท่านั้น
ดังนั้นเราจึงยังสามารถแก้ไขตัวชี้จำนวนเต็มของค่าได้
เนื่องจากไม่มีการใช้ค่าคงที่
เราใช้ค่าคงที่กับตัวชี้เท่านั้น เราสามารถพูดได้ว่าค่าเท่ากับ 777l
ค่าที่ชี้ไปมีการเปลี่ยนแปลง แต่คุณไม่ได้ใช้ตัวชี้เพื่อทำการเปลี่ยนแปลง
ตัวชี้เองก็ไม่คงที่เช่นกัน
ตัวชี้จำได้ว่ามีที่อยู่
เราไม่ได้ประกาศตัวชี้ให้เป็นค่าคงที่ ดังนั้นเราจึงยังสามารถเปลี่ยนแปลงสิ่งนั้นได้เช่นกัน
เราสิ่งที่ตัวชี้ชี้ให้คงที่ ถ้าเราประกาศตัวแปรใหม่ที่เรียกว่า number เราสามารถพูดได้ว่า
p-value เท่ากับ address ของตัวเลขนั้น
ไม่เป็นไรเพราะเรากำลังเปลี่ยนที่อยู่ของค่าของตัวชี้
เราไม่ได้เปลี่ยนค่าของสิ่งที่ตัวชี้ชี้ไป
ดังนั้น เข้าใจความแตกต่างนี้ ไม่ว่าจะเปลี่ยนค่าของตัวชี้
ซึ่งเป็นเพียงที่อยู่หรือเปลี่ยนสิ่งที่ตัวชี้กำลังชี้ไป
หากคุณไม่ต้องการเปลี่ยนสิ่งที่ตัวชี้กำลังชี้ไป
const จะต้องเป็นคำหลักคำแรกนั้นในการประกาศตัวชี้เอง
อีกครั้ง ในตัวอย่างนี้ เราจะเปลี่ยนที่อยู่ที่เก็บไว้ในค่า p ให้ชี้ไปที่ตัวเลข
เรายังไม่สามารถใช้ตัวชี้เพื่อเปลี่ยนค่าที่เก็บไว้ได้เนื่องจากถูกประกาศเนื่องจากเราไม่สามารถเปลี่ยนค่านั้นได้
คุณสามารถเปลี่ยนที่อยู่ที่เก็บไว้ในตัวชี้ได้มากเท่าที่คุณต้องการ เช่นเดียวกับที่เราทำ
ไม่อนุญาตให้ใช้ตัวชี้เพื่อเปลี่ยนค่าที่ชี้ไป แม้ว่าคุณจะเปลี่ยนที่อยู่ที่เก็บไว้ในตัวชี้แล้วก็ตาม
ดังนั้น แม้ว่าเราจะเปลี่ยนเป็นตัวเลขยาว
แต่ตัวชี้ก็ยังคงเป็นค่าคงที่เป็นคีย์เวิร์ด
เราจึงเปลี่ยนค่าไม่ได้ไม่ว่าตัวชี้จะชี้ไปที่อะไร
สิ่งที่เกี่ยวกับการไม่อนุญาตให้เปลี่ยนที่อยู่ของตัวชี้
ค่าที่อยู่ในตัวชี้
ดังนั้น คุณอาจต้องการตรวจสอบให้แน่ใจว่าไม่สามารถเปลี่ยนแปลงที่อยู่ที่เก็บไว้ในตัวชี้ได้
คุณสามารถทำได้โดยใช้คีย์เวิร์ดคงที่ในการประกาศพอยน์เตอร์ในลักษณะเดียวกัน
แต่ต่างกันเล็กน้อย
แทนที่จะมี const เป็นคีย์เวิร์ดแรก คุณต้องใส่ไว้หลังชนิดข้อมูลและหลังเครื่องหมายดอกจัน
นี่กำลังบอกว่าตัวชี้เองไม่สามารถเปลี่ยนค่าของมันได้
หากคุณวางไว้หน้า int แสดงว่าค่าที่ตัวชี้ชี้ไปไม่สามารถเปลี่ยนแปลงได้
ดังนั้นเมื่อคุณทำเช่นนี้ จะช่วยให้แน่ใจว่าตัวชี้ชี้ไปที่สิ่งเดียวกันเสมอ
ที่อยู่จะไม่มีวันเปลี่ยนแปลง
คอมไพเลอร์จะตรวจสอบว่าคุณไม่ได้พยายามเปลี่ยนตัวชี้ไปที่อื่นในโค้ดของคุณ
คุณไม่สามารถเปลี่ยนที่อยู่นี้ได้
ดังนั้นหากคุณพยายามบอกว่า p count เท่ากับ และ item คุณจะได้รับข้อผิดพลาด
เพราะนั่นสามารถชี้ไปที่ที่อยู่การนับเท่านั้น
มันคือทั้งหมดที่เกี่ยวกับตำแหน่งที่คุณวางคำหลักคงที่หากคุณต้องการเปลี่ยนแปลง
หากคุณไม่ต้องการให้ตัวชี้ที่ชี้ไปยังตัวชี้เปลี่ยนแปลงหรือหากคุณไม่อนุญาตให้เปลี่ยนที่อยู่ของตัวชี้
ค่าคงที่เนื่องจากคีย์เวิร์ดแรกไม่อนุญาตให้เปลี่ยนค่าที่ชี้ไปยังตัวชี้
หากคุณใส่ค่าคงที่หลังประเภทข้อมูลในดาว แสดงว่าที่อยู่ของตัวชี้ไม่สามารถเปลี่ยนแปลงได้
มีหลายอย่างที่ต้องทำและสับสนมาก ดังนั้นจงศึกษาสิ่งที่ฉันเพิ่งพูดไป
เข้าใจไวยกรณ์นั้น มันสำคัญมากและยุ่งยากมาก
สามารถทำผิดพลาดได้ง่ายมาก
จึงเข้าใจความแตกต่าง
คุณยังสามารถเปลี่ยนค่าที่
p count ชี้ไปที่การใช้ p count ได้เหมือนกับที่เราทำในครั้งก่อน เนื่องจาก p count คือ แม้ว่าเราจะกำหนดเราไม่สามารถกำหนดที่อยู่ใหม่ได้
แต่เรายังสามารถเปลี่ยนแปลงค่าที่ชี้ไปได้
ดังนั้นเราจึงสามารถยกเลิกการอ้างอิงและเปลี่ยนแปลงได้ เราสามารถพูดได้ว่า star p count เท่ากับ 345 ไม่เป็นไร
อ้างอิงค่าที่เก็บไว้ในการนับผ่านตัวชี้และเปลี่ยนค่าเป็น 345
คุณสามารถสร้างตัวชี้คงที่ที่ชี้ไปยังค่าที่เป็นค่าคงที่
ดังนั้นคุณสามารถทำสิ่งนี้ได้ ค่าคงที่เป็นดาว
รายการ p คงที่
และนั่นแสดงว่าค่าที่ชี้ไปนั้นเป็นค่าคงที่และตัวชี้นั้นเป็นค่าคงที่
ดังนั้นรายการ p จึงเป็นตัวชี้คงที่ไปยังค่าคงที่ดังนั้นทุกอย่างจึงได้รับการแก้ไข
คุณไม่สามารถเปลี่ยนที่อยู่ที่เก็บไว้ในรายการ p และคุณไม่สามารถใช้รายการ
p เพื่อแก้ไขสิ่งที่ชี้ไป
อย่างไรก็ตาม คุณยังสามารถเปลี่ยนรายการได้
รายการไม่เป็นค่าคงที่ คุณจึงสามารถเปลี่ยนแปลงรายการได้
คุณสามารถเปลี่ยนค่าได้โดยตรง
หากคุณต้องการแน่ใจว่าไม่มีอะไรเปลี่ยนแปลง คุณจะต้องสร้างตัวแปร
int ของรายการเป็นค่าคงที่ด้วย
แล้วจะบอกว่าไม่มีวันเปลี่ยน
แต่จำความแตกต่างที่นี่ระหว่างพอยน์เตอร์คงที่และค่าคงที่ที่ตัวชี้ชี้ไป
คุณสามารถใช้ทั้งสองอย่าง คุณสามารถใช้อย่างใดอย่างหนึ่ง
หากคุณต้องการให้แน่ใจว่าทุกอย่างคงที่
ให้ตรวจสอบว่าสิ่งที่คุณกำลังชี้ไปที่ตัวแปรนั้นตัวแปรนั้นเป็นค่าคงที่เช่นกัน ขอขอบคุณ.