แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | ชี้ | การอ้างอิง |
---|---|---|
ขั้นพื้นฐาน | ตัวชี้คือที่อยู่หน่วยความจำของตัวแปร | การอ้างอิงเป็นนามแฝงสำหรับตัวแปร |
ผลตอบแทน | ตัวแปรตัวชี้ส่งคืนค่าที่อยู่ที่อยู่ที่เก็บไว้ในตัวแปรตัวชี้ซึ่งนำหน้าด้วยเครื่องหมายตัวชี้ '*' | ตัวแปรอ้างอิงส่งกลับที่อยู่ของตัวแปรนำหน้าด้วยเครื่องหมายอ้างอิง '&' |
ผู้ประกอบการ | *, -> | & |
การอ้างอิง Null | ตัวแปรตัวชี้สามารถอ้างถึง NULL | ตัวแปรอ้างอิงไม่สามารถอ้างถึง NULL ได้ |
การเริ่มต้น | สามารถสร้างตัวชี้แบบไม่มีการเริ่มต้น | ไม่สามารถสร้างการอ้างอิงที่ไม่ได้กำหนดค่าเริ่มต้นได้ |
เวลาเริ่มต้น | ตัวแปรตัวชี้สามารถเริ่มต้น ณ เวลาใดก็ได้ในโปรแกรม | ตัวแปรอ้างอิงสามารถเริ่มต้นได้ในเวลาที่สร้างเท่านั้น |
เตรียมใช้งานใหม่ | ตัวแปรตัวชี้สามารถเริ่มต้นใหม่ได้หลายครั้งตามที่ต้องการ | ตัวแปรอ้างอิงไม่สามารถเริ่มต้นใหม่อีกครั้งในโปรแกรม |
ความหมายของตัวชี้
“ ตัวชี้” เป็นตัวแปรที่เก็บตำแหน่งหน่วยความจำของตัวแปรอื่น ตัวดำเนินการที่ใช้โดยตัวแปรพอยน์เตอร์คือ * และ -> การประกาศตัวแปรตัวชี้ประกอบด้วยชนิดข้อมูลพื้นฐานตามด้วยเครื่องหมาย '*' และชื่อตัวแปร
พิมพ์ * var_name;
ให้เราเข้าใจตัวชี้ด้วยความช่วยเหลือของตัวอย่าง
int a = 4; int * ptr = & a; ศาล <ที่นี่เรามีตัวแปรจำนวนเต็ม a และตัวแปรตัวชี้ ptr ที่เก็บที่อยู่ของตัวแปร a
เลขคณิตของตัวชี้
ตัวแปรตัวชี้สามารถดำเนินการได้ด้วยตัวดำเนินการทางคณิตศาสตร์สองตัวที่เป็น "การบวก" และ "การลบ" การเพิ่มที่เรียกว่า "การเพิ่มขึ้น" และการลบจะถูกเรียกว่า "การลดลง" เมื่อตัวแปรพอยน์เตอร์เพิ่มขึ้นมันจะชี้ไปยังตำแหน่งหน่วยความจำของตัวแปรถัดไปของประเภทฐาน เนื่องจากตัวแปรตัวชี้ลดลงจึงชี้ไปยังตำแหน่งหน่วยความจำของตัวแปรก่อนหน้าของประเภทฐาน ดังนั้นอาร์เรย์สามารถเข้าถึงได้อย่างมีประสิทธิภาพโดยตัวแปรตัวชี้
หลายทาง
ตัวชี้ชี้ไปที่ตัวแปรตัวชี้อื่นซึ่งชี้ไปที่ค่าเป้าหมาย ตัวชี้ชนิดนี้เริ่มต้นได้เสมอด้วยที่อยู่ของตัวแปรตัวชี้อื่น การประกาศของตัวชี้ไปยังตัวชี้มีดังนี้
พิมพ์ ** var_name;ลองศึกษาด้วยตัวอย่าง
int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; ศาล <ตัวชี้ฟังก์ชั่น
ในขณะที่เรารู้ว่าฟังก์ชั่นไม่ใช่ตัวแปร แต่ก็มีตำแหน่งหน่วยความจำที่สามารถกำหนดให้กับตัวแปรตัวชี้ เมื่อตัวชี้ชี้ไปที่ฟังก์ชั่นแล้วฟังก์ชั่นสามารถเรียกใช้ด้วยตัวชี้ฟังก์ชั่นที่
จุดสำคัญที่ต้องจำเกี่ยวกับตัวชี้
- ตัวแปรตัวชี้สามารถสร้างได้โดยไม่ต้องเริ่มต้นและสามารถเริ่มต้นได้ทุกที่ในโปรแกรม
- ตัวแปรตัวชี้สามารถเริ่มต้นใหม่ให้กับตัวแปรอื่น
- ตัวแปรตัวชี้สามารถอ้างถึง NULL
คำจำกัดความของการอ้างอิง
ตัวแปรอ้างอิงใช้เพื่ออ้างถึงตัวแปรที่กำหนดให้กับตัวแปรอ้างอิงนั้น โอเปอเรเตอร์ที่ใช้โดยตัวแปรอ้างอิงคือ '&' การประกาศตัวแปรอ้างอิงประกอบด้วยประเภทฐานตามด้วยเครื่องหมาย '&' และชื่อตัวแปร
พิมพ์ & refer_var_name = var_ name;ที่นี่ประเภทคือประเภทข้อมูลผู้ประกอบการ & ยืนยันว่ามันเป็นตัวแปรอ้างอิง Refer_var_name เป็นชื่อของตัวแปรอ้างอิง var_name เป็นชื่อของตัวแปรซึ่งเราต้องการให้ตัวแปรอ้างอิงอ้างอิง
ให้เราเข้าใจตัวแปรอ้างอิงด้วยความช่วยเหลือของตัวอย่าง
int a = 4; int & b = a; // b หมายถึง ab = 6; // ตอนนี้ a = 6ในที่นี้ตัวแปรของประเภท int ได้รับการกำหนดค่า 4 ตัวแปรอ้างอิงถูกกำหนดให้ตัวแปร a คือ b คือนามแฝงของ a ตอนนี้เมื่อเรากำหนดค่าอื่นให้กับ b เราจะปรับเปลี่ยนค่าของ a ดังนั้นจึงอาจกล่าวได้ว่าการเปลี่ยนแปลงที่ทำกับตัวแปรอ้างอิงจะเกิดขึ้นในตัวแปรที่อ้างอิงโดยตัวแปรอ้างอิงนั้น
จุดที่สำคัญที่สุดคือตัวแปรอ้างอิงต้องเริ่มต้น ณ เวลาที่สร้างเมื่อตัวแปรอ้างอิงนั้นเริ่มต้นได้ด้วยตัวแปรมันไม่สามารถเริ่มต้นใหม่เพื่ออ้างอิงตัวแปรอื่นได้ ช่วงเวลาที่คุณกำหนดค่าให้กับตัวแปรอ้างอิงคุณกำหนดค่านั้นให้กับตัวแปรที่ตัวแปรอ้างอิงชี้ไป ตัวแปรอ้างอิงไม่สามารถอ้างถึง NULL ได้ ไม่สามารถดำเนินการทางคณิตศาสตร์กับตัวแปรอ้างอิงได้
ตัวแปรอ้างอิงสามารถใช้งานได้สามวิธี:
- เป็นฟังก์ชั่นการคืนค่า
- เป็นพารามิเตอร์ฟังก์ชั่น
- เป็นการอ้างอิงแบบสแตนด์อโลน
ความแตกต่างที่สำคัญระหว่างตัวชี้และการอ้างอิง
- การอ้างอิงเหมือนกับการสร้างชื่ออื่นเพื่ออ้างอิงตัวแปรเพื่อให้สามารถอ้างอิงกับชื่ออื่นได้ ในทางกลับกันตัวชี้เป็นเพียงที่อยู่หน่วยความจำของตัวแปร
- ตัวแปรตัวชี้ถ้านำหน้าด้วย '*' จะคืนค่าของตัวแปรที่มีที่อยู่ถูกเก็บไว้ในตัวชี้ varaible ตัวแปรอ้างอิงเมื่อนำหน้าด้วย '&' จะส่งคืนที่อยู่ของตัวแปรนั้น
- ตัวดำเนินการตัวชี้คือ * และ -> ในขณะที่ตัวดำเนินการอ้างอิงคือ &.
- ตัวแปรพอยน์เตอร์ถ้าไม่มีที่อยู่ของตัวแปรใด ๆ ซึ่งชี้ไปที่ null ตัวแปรอ้างอิงไม่สามารถอ้างถึง Null ได้
- คุณสามารถสร้างตัวแปรตัวชี้ unitialized แต่เราสร้างการอ้างอิงเมื่อเราต้องการนามแฝงของตัวแปรบางอย่างเพื่อให้คุณไม่สามารถสร้างการอ้างอิง unitialize
- คุณสามารถเริ่มต้นตัวชี้ใหม่ได้ แต่เมื่อคุณเริ่มต้นใหม่จะไม่สามารถเริ่มต้นได้อีก
- คุณสามารถสร้างตัวชี้ที่ว่างเปล่าและเริ่มต้นได้ตลอดเวลา แต่คุณต้องเริ่มต้นการอ้างอิงใหม่เฉพาะเมื่อคุณสร้างการอ้างอิง
บันทึก:
Java ไม่รองรับพอยน์เตอร์
ข้อสรุป
ตัวชี้และการอ้างอิงทั้งสองจะใช้ในการชี้หรืออ้างอิงตัวแปรอื่น แต่ทั้งคู่ต่างกันในการใช้งานและการนำไปใช้งาน