พอยน์เตอร์และอาร์เรย์
คอมไพเลอร์จะจัดสรรตำแหน่งหน่วยความจำอย่างต่อเนื่องสำหรับองค์ประกอบทั้งหมดของอาร์เรย์
ที่อยู่ฐานคือตำแหน่งขององค์ประกอบแรกในอาร์เรย์
ตัวอย่างเช่น 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