พอยน์เตอร์และอาร์เรย์
คอมไพเลอร์จะจัดสรรตำแหน่งหน่วยความจำอย่างต่อเนื่องสำหรับองค์ประกอบทั้งหมดของอาร์เรย์
ที่อยู่ฐานคือตำแหน่งขององค์ประกอบแรกในอาร์เรย์
ตัวอย่างเช่น 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
ที่อยู่ขององค์ประกอบคำนวณโดยใช้ดัชนีและตัวประกอบสเกลของประเภทข้อมูล
ตัวอย่าง
ที่อยู่ของ a[3]=base address+(3*scale factor of int)
=1000+(3*4)
=1000+12
=1012
*(p+3) gives the value of a[3] a[i] = *(p+i)
โปรแกรม
#include<stdio.h> main (){ int a[5]; int *p,i; clrscr (); 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)); getch(); }
ผลลัพธ์
Enter 5 elements : 10 20 30 40 50 Elements of the array are : 10 20 30 40 50