สวัสดีและยินดีต้อนรับกลับ
ในการบรรยายนี้ ฉันต้องการพูดคุยเกี่ยวกับการกำหนดพอยน์เตอร์ ส่วนใหญ่เป็นไวยากรณ์สำหรับการประกาศนักข่าว
จากนั้นใช้ที่อยู่ของโอเปอเรเตอร์เพื่อกำหนดที่อยู่หน่วยความจำให้กับตัวชี้
จนถึงจุดนี้ เราควรเจาะลึกว่าพอยน์เตอร์ไม่มีอะไรมากไปกว่าตัวแปรที่ชี้ไปยังที่อยู่หน่วยความจำหรือมีที่อยู่หน่วยความจำเป็นค่าของมัน
ดังนั้นการประกาศตัวชี้จึงไม่เหมือนกับการสร้างตัวชี้ปกติ
ดังนั้นคุณจึงไม่สามารถทำอะไรเช่นพอยน์เตอร์พอยน์เตอร์ได้
นั่นไม่ใช่วิธีการประกาศตัวชี้ ไวยากรณ์แตกต่างกันเล็กน้อย
คุณใช้เครื่องหมายดอกจัน จึงไม่เพียงพอที่จะบอกว่าตัวแปรเป็นตัวชี้
คุณต้องระบุชนิดของตัวแปรที่ตัวชี้ชี้
ตัวแปรประเภทต่างๆ ใช้พื้นที่เก็บข้อมูลต่างกัน
การดำเนินการของตัวชี้บางอย่างต้องการความรู้เกี่ยวกับขนาดที่เก็บข้อมูลนั้น
เช่นเดียวกับตัวแปรปกติเมื่อคุณระบุประเภทข้อมูล
เมื่อคุณสร้างตัวแปรประเภทข้อมูลตัวชี้ คุณจะต้องระบุประเภทข้อมูลนั้นด้วย
คุณสามารถประกาศตัวชี้ไปยังตัวแปรประเภท int โดยทำดังต่อไปนี้
หมายเลข int star หรือ asterisk p
ที่จะบอกคุณว่าเป็นตัวชี้
int มีลักษณะเหมือนกัน แต่หลังจากนั้นคือเครื่องหมายดอกจัน
เครื่องหมายดอกจันหมายถึงตัวชี้ จากนั้น คุณระบุชนิดของตัวชี้เอง
นี่คือตัวชี้ int
ชนิดของตัวแปรที่มีชื่อ p ตัวเลข int star
สามารถเก็บที่อยู่ของตัวแปรประเภท int ได้
ตัวชี้เก็บที่อยู่ ดังนั้น หากคุณกำลังจะเก็บที่อยู่ของตัวแปรอื่น
ตัวแปรนั้นจะต้องกำหนดเป็นประเภทจำนวนเต็ม
ดังนั้นที่นี่ PI กำลังชี้ไปที่ตัวแปร
int, char star pc,
ที่ชี้ไปที่ตัวแปรอักขระ, float star pf star pg,
สิ่งเหล่านี้เป็นตัวชี้ไปยังตัวแปร float
นั่นเป็นวิธีที่คุณกำลังกำหนดพวกเขา ประเภทมีความสำคัญ
ช่องว่างระหว่างเครื่องหมายดอกจันและชื่อตัวชี้เป็นทางเลือก
คุณไม่จำเป็นต้องวางที่ว่างที่นั่น คุณไม่สามารถมีที่ว่างได้
สิ่งที่เกิดขึ้น และเรากำลังจะพูดถึงการดีรีเฟอเรนซ์ตัวแปรคือ
คุณมักจะใช้ช่องว่างในการประกาศ และเมื่อคุณกำลังยกเลิกการอ้างอิง คุณไม่ได้ใช้มัน
ดังนั้นการประกาศทั้งหมดเหล่านี้ควรมีช่องว่างตามแบบแผน
ค่าของพอยน์เตอร์คือที่อยู่ ดังนั้นจึงต้องแสดงภายในเป็นอิมเมจที่ไม่ได้ลงนามในระบบส่วนใหญ่
เลยยังต้องเก็บอะไรไว้อีก มันก็แค่เก็บเลขฐานสิบหก
และถึงแม้ว่ามันจะเก็บมันไว้เหมือนเป็นจำนวนเต็ม แต่อย่าคิดว่ามันเป็นประเภทจำนวนเต็ม
เช่นเดียวกับที่คุณสามารถทำได้ด้วยจำนวนเต็ม คุณไม่สามารถทำได้ด้วยพอยน์เตอร์และในทางกลับกัน
ดังนั้นแม้ว่าคุณลองพิมพ์ออกมา มันจะดูเหมือน ตัวเลขฐานสิบหก ไม่ได้หมายความว่าคุณจะถือว่ามันเป็นจำนวนเต็มได้
คุณสามารถคูณจำนวนเต็มหนึ่งกับอีกจำนวนหนึ่งได้ ตัวอย่างเช่น
แต่คุณไม่สามารถคูณตัวชี้ตัวหนึ่งกับอีกตัวหนึ่งได้
ตัวชี้เป็นชนิดใหม่จริงๆ ไม่ใช่ประเภทจำนวนเต็ม
เปอร์เซ็นต์ p แสดงถึงรูปแบบที่ระบุสำหรับพอยน์เตอร์
ฉันจะผ่านการแสดงข้อมูลต่างๆ สำหรับพอยน์เตอร์ แล้วเราจะมาดูกันว่ามันใช้งานอย่างไร
การประกาศก่อนหน้านี้สร้างตัวแปร
แต่ไม่มีการเริ่มต้น ไม่มีงานที่นั่น
คุณต้องการกำหนดค่าให้กับตัวชี้เสมอ
มันอันตรายมากถ้าคุณไม่เริ่มต้นสิ่งนั้น
ดังนั้นคุณต้องการเริ่มต้นตัวชี้เมื่อคุณประกาศ
หากคุณไม่ทราบว่าต้องเริ่มต้นใช้งานอะไรหากไม่ใช่ที่อยู่ของตัวแปรอื่น
หรือคุณไม่ได้จัดสรรหน่วยความจำแบบไดนามิกสำหรับตัวแปรนั้น
คุณสามารถใช้ตัวชี้ค่าว่างได้
เพื่อให้คุณสามารถเริ่มต้นตัวชี้เพื่อไม่ให้ชี้ไปที่สิ่งใด
คุณทำสิ่งนี้โดยใช้ค่า null
คุณบอกว่าหมายเลข instar p เท่ากับ null สำหรับตัวชี้ไปยัง int
Null เป็นค่าคงที่ที่กำหนดโดยไลบรารีมาตรฐาน
มีค่าเท่ากับศูนย์สำหรับพอยน์เตอร์
หมายความว่ามันไม่ชี้ไปที่สิ่งใด
รับรองได้ว่าจะไม่ชี้ไปที่ตำแหน่งใดๆ ในหน่วยความจำ
นี่เป็นสิ่งที่ดีที่คุณอยากทำ เพราะหมายความว่าคุณจะไม่ทำผิดพลาดโดยบังเอิญทำบัฟเฟอร์โอเวอร์โฟลว์หรือเขียนลงในหน่วยความจำที่คุณไม่ควรจะเขียน
เมื่อเริ่มต้นสิ่งนี้ จะเป็นการจำกัดข้อผิดพลาดบางอย่างที่คุณสามารถทำได้
เราพูดถึงค่า null ก่อนหน้านี้เล็กน้อย เราพูดถึงอักขระ null
แนวคิดนั้นแตกต่างจากตัวชี้ค่าว่าง
ตัวชี้ค่าว่างหมายความว่าไม่ได้ชี้ไปที่สิ่งใด และควรเริ่มต้นด้วยสิ่งนั้น
คุณต้องเพิ่มคำสั่ง include สำหรับ def มาตรฐาน h หากคุณต้องการใช้นิยาม
null ที่นี่
ที่อยู่ของโอเปอเรเตอร์ หากคุณต้องการกำหนดตัวชี้ไปยังที่อยู่
คุณสามารถใช้ตัวดำเนินการที่อยู่ของตัวแปรที่มีอยู่ได้
ดังนั้นหากคุณต้องการเริ่มต้นตัวแปรของคุณด้วยตัวแปร add หรือ sub ที่คุณได้ประกาศไปแล้วว่าคุณใช้ที่อยู่ของตัวดำเนินการ
เครื่องหมายและ
เราได้เห็นสิ่งนี้แล้วเมื่อเราพูดถึงฟังก์ชัน scanf
ที่นี่เรากำลังกำหนดค่าตัวแปรจำนวนเต็ม 99
เรากำลังสร้างตัวชี้ประเภท int และกำหนดที่อยู่ของตัวเลขให้
เราสามารถทำได้เพราะตัวเลขเป็น
int และตัวชี้ที่เราสร้างขึ้นชี้ไปที่ int ด้วย
สิ่งที่เราต้องทำหลังจากตัวดำเนินการเท่ากับคือใช้เครื่องหมายและ
ดังนั้นตอนนี้ p number ก็จะมีที่อยู่ของตัวเลข
ค่าเริ่มต้นของหมายเลข p คือที่อยู่ของหมายเลขตัวแปร
การประกาศหมายเลขต้องมาก่อนการประกาศของพอยน์เตอร์ที่เก็บที่อยู่
เนื่องจากคุณไม่สามารถกำหนดบางอย่างให้กับตัวชี้ที่ไม่มีการจัดสรรหน่วยความจำได้
หากคุณพยายามกำหนดให้กับหมายเลขตัวชี้นั้น หมายเลขนั้นจะไม่มีอยู่ เว้นแต่คุณจะกำหนดหลังจากนั้น
ในการกำหนดที่อยู่ให้กับพอยน์เตอร์ ที่อยู่นั้นจะต้องมีการจัดสรรหน่วยความจำ
มิฉะนั้นคอมไพเลอร์จะบ่น
ระวังให้ดีเพราะไม่มีอะไรพิเศษเกี่ยวกับการประกาศตัวชี้
คุณสามารถประกาศตัวแปรและพอยน์เตอร์ปกติในคำสั่งเดียวกัน
คุณก็บอกว่าค่าสองเท่า, ค่า p f num
ในคำสั่งนี้ นี่เป็นเพียงตัวแปรที่สอง
p val เป็นตัวชี้ อีกสองตัวเป็นเพียงสองเท่า
ชัดเจนกว่านี้เล็กน้อย ชัดเจนขึ้นเล็กน้อยในการประกาศนั้น
แต่ถ้าคุณพูดใน
star pq นี่หมายความว่าทั้งคู่เป็นตัวชี้และไม่ใช่
เรามีตัวชี้ int ตัวเดียวที่นี่นั่นคือ
p ตัวแปร q ก็แค่พิมพ์ int
เป็นความผิดพลาดทั่วไปที่จะคิดว่าทั้ง p และ q เป็นตัวชี้
ดังนั้นจงระวังเมื่อคุณประกาศตัวชี้บนตัวแปรหลายตัวในบรรทัดเดียวกัน
ยังเป็นความคิดที่ดีที่จะใช้ชื่อที่ขึ้นต้นด้วย p เป็นชื่อตัวชี้
สิ่งนี้จะบอกคุณว่า ตัวแปรนั้นเป็นตัวชี้โดยเพียงแค่ดูมัน
ดังนั้นโดยปกติคุณจะประกาศตัวแปรทั้งหมดที่ด้านบนของโปรแกรม
ซึ่งมักจะอยู่ภายในฟังก์ชันหลัก
และเมื่อคุณเห็นตัวแปรเหล่านั้นใช้ในภายหลังในโปรแกรม
คุณสามารถระบุประเภทข้อมูลต่างๆ หรือประเภทตัวชี้ต่างๆ ได้อย่างง่ายดาย
เนื่องจากมี p เป็นคำนำหน้า
ดังนั้นการบรรยายนี้จึงอธิบายวิธีที่คุณสามารถกำหนด
ประกาศตัวชี้ จากนั้นกำหนดที่อยู่ของตัวแปรที่มีอยู่ให้กับตัวชี้
ขณะนี้มีหลายกรณีที่คุณไม่จำเป็นต้องกำหนดค่าตัวชี้ให้กับตัวแปรที่มีอยู่
บางทีคุณอาจต้องการจัดสรรหน่วยความจำใหม่
เราจะพูดถึงสิ่งเหล่านั้นในการบรรยายต่อไป แต่ตอนนี้เราจะทำให้มันง่าย
เราจะมุ่งเน้นไปที่การใช้พอยน์เตอร์ของประเภท
int และประเภทง่าย ๆ ที่แตกต่างกัน เช่น คู่หรือลอย
และเราจะเน้นไปที่การกำหนดตัวแปรที่มีอยู่
ที่อยู่ของ และดูว่ามันทำงานอย่างไร
ดังนั้นให้ก้าวไปข้างหน้า ขอขอบคุณ.