อาร์เรย์เป็นโครงสร้างข้อมูลแบบหนึ่ง ที่จัดเก็บชุดข้อมูลลำดับต่อเนื่อง ขนาดคงที่ ของชนิดเดียวกัน
อาร์เรย์ใช้จัดเก็บชุดข้อมูล แต่บ่อยครั้งคิดว่าอาร์เรย์เป็นชุดตัวแปรชนิดเดียวกันที่จัดกลุ่มไว้ด้วยกัน
ข้อจำกัด (Limitations)
ข้อจำกัดของอาร์เรย์อธิบายด้านล่าง:
อาร์เรย์ที่สร้างขึ้นจะเป็นแบบจัตุรัส (Homogeneous) นั่นคือ ในอาร์เรย์จำนวนเต็ม จะเก็บได้แค่ค่าจำนวนเต็ม อาร์เรย์จำนวนจริงเก็บได้แค่ค่าจำนวนจริง และอาร์เรย์ตัวอักษรเก็บได้แค่ตัวอักษร ดังนั้น ไม่มีอาร์เรย์ใดที่เก็บค่าของสองชนิดข้อมูลได้
ขณะประกาศอาร์เรย์ การระบุขนาดอาร์เรย์เป็นข้อบังคับ และขนาดต้องเป็นค่าคงที่ ดังนั้น จะมี إما ขาดแคลน หรือ เสียดายหน่วยความจำ
ต้องมีการเลื่อน (Shifting) สำหรับการแทรกหรือลบองค์ประกอบในอาร์เรย์
อาร์เรย์ไม่ตรวจสอบขอบเขต (Bounds Checking): ในภาษา C ไม่สามารถตรวจสอบได้ ว่าค่าที่ป้อนในอาร์เรย์เกินขนาดของอาร์เรย์หรือไม่
ข้อมูลที่ป้อนด้วยดัชนี เกินขนาดอาร์เรย์ จะถูกวางนอกอาร์เรย์ โดยทั่วไปอยู่เหนือข้อมูลหรือโปรแกรมเอง
สิ่งนี้นำไปสู่ผลลัพธ์ที่คาดการณ์ไม่ได้ ยังไม่มีข้อความเตือนให้นักเขียนโปรแกรมรู้ว่าถูกขอบเขตอาร์เรย์ ในบางกรณี โปรแกรมอาจค้าง
ดังนั้น โปรแกรมต่อไปนี้อาจให้ผลลัพธ์ที่ไม่พึงประสงค์:
int a[10], i;
for(i = 0; i <= 20; i++)
a[i] = i;ตัวอย่าง
โปรแกรม C แสดงผลรวมของสองอาร์เรย์:
#include <stdio.h>
void main() {
// ประกาศอาร์เรย์พร้อมกำหนดค่าเริ่มต้นตอนคอมไพล์ //
int array1[5], array2[5], sum[5];
// ประกาศตัวแปร //
int i;
// พิมพ์เอาต์พุทใช้ลูป for //
printf("Enter the values of array1 :\n");
for(i = 0; i < 5; i++) {
printf("array1[%d] : \n", i);
scanf("%d", &array1[i]);
}
printf("Enter the values of array2 :\n");
for(i = 0; i < 5; i++) {
printf("array2[%d] :\n", i);
scanf("%d", &array2[i]);
}
printf("Elements in the sum of array1 and array2 are:\n");
for(i = 0; i < 5; i++) {
sum[i] = array1[i] + array2[i];
printf("%d ", sum[i]);
}
}ผลลัพธ์
เมื่อรันโปรแกรม จะได้ผลลัพธ์ดังนี้:
Enter the values of array1: array1[0] : 2 array1[1] : 3 array1[2] : 1 array1[3] : 2 array1[4] : 3 Enter the values of array2: array2[0] : 4 array2[1] : 5 array2[2] : 3 array2[3] : 2 array2[4] : 1 Elements in the sum of array1 and array2 are: 6 8 4 4 4