ตัวชี้เป็นตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น
คุณสมบัติ
คุณสมบัติของพอยน์เตอร์อธิบายไว้ด้านล่าง -
- ตัวชี้ช่วยประหยัดพื้นที่หน่วยความจำ
- เวลาดำเนินการของตัวชี้เร็วขึ้นเนื่องจากการเข้าถึงตำแหน่งหน่วยความจำโดยตรง
- ด้วยความช่วยเหลือของพอยน์เตอร์ หน่วยความจำจะเข้าถึงได้อย่างมีประสิทธิภาพ กล่าวคือ มีการจัดสรรหน่วยความจำและจัดสรรคืนแบบไดนามิก
- พอยน์เตอร์ใช้กับโครงสร้างข้อมูล
การประกาศตัวชี้ การเริ่มต้น และการเข้าถึง
พิจารณาข้อความต่อไปนี้ −
int qty = 179;
ในหน่วยความจำ ตัวแปรสามารถแสดงได้ดังนี้ −
การประกาศตัวชี้
หมายความว่า 'p' เป็นตัวแปรตัวชี้ซึ่งเก็บที่อยู่ของตัวแปรจำนวนเต็มอื่นตามที่กล่าวไว้ในคำสั่งด้านล่าง -
Int *p;
การเริ่มต้นของตัวชี้
ตัวดำเนินการที่อยู่ (&) ใช้เพื่อเริ่มต้นตัวแปรตัวชี้
ตัวอย่างเช่น −
int qty = 175; int *p; p= &qty;
การเข้าถึงตัวแปรผ่านตัวชี้
ในการเข้าถึงค่าของตัวแปร จะใช้ตัวดำเนินการทางอ้อม (*)
ตัวอย่างเช่น −
ที่นี่ '*' สามารถถือเป็นค่าที่อยู่
สองข้อความนี้เทียบเท่ากับข้อความต่อไปนี้ −
p = &qty; n = *p; n =qty
พอยน์เตอร์และอาร์เรย์หนึ่งมิติ
- คอมไพเลอร์จัดสรรตำแหน่งหน่วยความจำอย่างต่อเนื่องสำหรับองค์ประกอบทั้งหมดของอาร์เรย์
- ที่อยู่ฐาน =ที่อยู่องค์ประกอบแรก (ดัชนี 0) ของอาร์เรย์
- ตัวอย่างเช่น − int a [5] ={10, 20,30,40,50};
องค์ประกอบ
ห้าองค์ประกอบจะถูกเก็บไว้ดังนี้ -
-
ถ้า 'p' ถูกประกาศเป็นตัวชี้จำนวนเต็ม ดังนั้นอาร์เรย์ 'a' สามารถชี้ได้โดยการกำหนดต่อไปนี้ -
p = a; (or) p = &a[0];
-
ทุกค่าของ 'a' เข้าถึงได้โดยใช้ p++ เพื่อย้ายจากองค์ประกอบหนึ่งไปยังอีกองค์ประกอบหนึ่ง เมื่อตัวชี้เพิ่มขึ้น ค่าของตัวชี้จะเพิ่มขึ้นตามขนาดของประเภทข้อมูลที่ชี้ไป ความยาวนี้เรียกว่า "ตัวประกอบมาตราส่วน"
-
ความสัมพันธ์ระหว่าง 'p' และ 'a' มีคำอธิบายด้านล่าง -
P = &a[0] = 1000 P+1 = &a[1] = 1004 P+2 = &a[2] = 1008 P+3 = &a[3] = 1012 P+4 = &a[4] = 1016
-
ที่อยู่ขององค์ประกอบคำนวณโดยใช้ดัชนีและตัวประกอบขนาดของประเภทข้อมูล ตัวอย่างเพื่ออธิบายสิ่งนี้ได้รับพร้อมนี้
Address of a[3] = base address + (3* scale factor of int) = 1000 + (3*4) = 1000 +12 = 1012
-
สามารถใช้พอยน์เตอร์เพื่อเข้าถึงองค์ประกอบอาร์เรย์แทนที่จะใช้การจัดทำดัชนีอาร์เรย์
-
*(p+3) ให้ค่าของ a[3].
a[i] = *(p+i)
ตัวอย่างโปรแกรม
ต่อไปนี้เป็นโปรแกรม C สำหรับพอยน์เตอร์และอาร์เรย์หนึ่งมิติ -
#include<stdio.h> main ( ){ int a[5]; int *p,i; printf ("Enter 5 lements"); for (i=0; i<5; i++) scanf ("%d", &a[i]); p = &a[0]; printf ("Elements of the array are"); for (i=0; i<5; i++) printf("%d", *(p+i)); }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50