ตัวชี้คือตัวแปรที่มีค่าเป็นที่อยู่ของตัวแปรอื่น เช่น ที่อยู่ตรงของตำแหน่งหน่วยความจำ เช่นเดียวกับตัวแปรหรือค่าคงที่ใดๆ คุณต้องประกาศตัวชี้ก่อนที่จะใช้เพื่อเก็บที่อยู่ของตัวแปร
พิจารณาข้อความต่อไปนี้ −
int จำนวน =179;
การแสดงตัวแปรในหน่วยความจำมีดังนี้ −
คุณสามารถประกาศตัวชี้ได้ดังนี้ -
Int *p;
หมายความว่า 'p' เป็นตัวแปรตัวชี้ที่เก็บที่อยู่ของตัวแปรจำนวนเต็มอื่น
ตัวดำเนินการที่อยู่ (&) ใช้เพื่อเริ่มต้นตัวแปรตัวชี้
ตัวอย่างเช่น −
int qty =175;int *p;p=&qty;
ในการเข้าถึงค่าของตัวแปร จะใช้ตัวดำเนินการทางอ้อม (*)
ตัวอย่างเช่น −
'*' สามารถใช้เป็นค่าที่อยู่ได้
ข้อความทั้งสองนี้เทียบเท่ากับข้อความต่อไปนี้ -
<ก่อน> p =&qty; n =*p; n =จำนวนการทำงานของตัวชี้ที่แตกต่างกัน
อธิบายการทำงานของตัวชี้ในภาษา C ด้านล่าง -
-
งานที่มอบหมาย − เราสามารถกำหนดที่อยู่ให้กับตัวชี้โดยใช้ &(ตัวดำเนินการที่อยู่)
-
การหาค่า − ไม่มีอะไรเลยนอกจาก dereference โดยที่ตัวดำเนินการ * ให้ค่าที่เก็บไว้ในตำแหน่งที่ชี้ไปยังตำแหน่ง
-
การใช้ที่อยู่ตัวชี้ − เช่นเดียวกับตัวแปรอื่นๆ ตัวแปรพอยน์เตอร์มีทั้งที่อยู่และค่า ด้วยความช่วยเหลือของโอเปอเรเตอร์ที่อยู่ เราสามารถค้นหาได้เมื่อตัวชี้ถูกเก็บไว้
-
การเพิ่มจำนวนเต็มให้กับตัวชี้ − เราสามารถใช้ตัวดำเนินการ + เพื่อเพิ่มจำนวนเต็มให้กับตัวชี้หรือตัวชี้ไปยังจำนวนเต็ม ในทั้งสองกรณี int จะถูกคูณด้วยจำนวนไบต์ในประเภทที่ชี้ไปที่ประเภท และผลลัพธ์จะถูกเพิ่มไปยังที่อยู่เดิม
-
การเพิ่มตัวชี้ − เป็นองค์ประกอบอาร์เรย์ที่ทำให้ย้ายไปยังองค์ประกอบถัดไปของอาร์เรย์
-
การลบ int จากพอยน์เตอร์ − เรากำลังใช้ตัวดำเนินการ – (ลบ) เพื่อลบจำนวนเต็มออกจากตัวชี้ จำนวนเต็มจะถูกคูณด้วยจำนวนไบต์ที่ชี้ไปที่ประเภท และผลลัพธ์จะถูกลบออกจากที่อยู่เดิม
-
ลดค่าตัวชี้ − ตัวชี้แบบลดค่า ชี้ไปที่ตำแหน่งก่อนหน้าแทนก่อนหน้านี้ เราสามารถใช้ทั้งแบบนำหน้าและแบบแก้ไขภายหลังสำหรับตัวดำเนินการลดค่า
-
การลบ − เราสามารถพบความแตกต่างของตัวชี้สองตัว โดยทั่วไปแล้ว เราเคยค้นหาว่าองค์ประกอบต่างกันอย่างไร
-
การเปรียบเทียบ − เราจะใช้ตัวดำเนินการเชิงสัมพันธ์เพื่อเปรียบเทียบค่าของพอยน์เตอร์สองตัว
ตัวอย่าง
รับด้านล่างเป็นโปรแกรมที่จะแสดงการทำงานของการดำเนินการของตัวชี้ในภาษา C -
#includemain ( ){ int x,y; //ประกาศตัวชี้ int *p; clrscr ( ); x=10; //การกำหนดค่าให้กับตัวชี้ p =&x; y=*p; printf ("ค่าของ x =%d", x); printf ("x ถูกเก็บไว้ที่ที่อยู่ %u", &x); printf ("ค่าของ x โดยใช้ตัวชี้ =%d", *p); printf ("ที่อยู่ของ x โดยใช้ตัวชี้ =%u", p); printf (“ค่าของ x ใน y =%d", y); *p =25; printf ("ตอนนี้ x =%d", x) getch ( );}
ผลลัพธ์
เมื่อคุณรันโปรแกรมดังกล่าว คุณจะได้รับผลลัพธ์ต่อไปนี้ -
ค่าของ x =10x ถูกเก็บไว้ที่ address =5000Address ของ x โดยใช้ตัวชี้ =10Address ของ x โดยใช้ตัวชี้ =5000Value of x ใน y =10Now x =25