ความหมาย
Array of structures คือการสร้างอาร์เรย์ที่แต่ละ element เป็น structure เหมาะสำหรับเก็บข้อมูลหลายเรคคอร์ดที่มีโครงสร้างเหมือนกัน
รูปแบบทั่วไปของ Structure
struct tagname {
datatype member1;
datatype member2;
datatype memberN;
};การประกาศ Array of Structures
ต้องประกาศ structure ก่อน แล้วค่อยประกาศ array ของ type นั้น
struct book {
int pages;
char author[30];
float price;
};
struct book b[10]; // array 10 elements ของ type bookคุณสมบัติ
- การใช้งานที่พบบ่อยที่สุดของ structure ใน C
- แต่ละ element ใน array เป็น structure อิสระ มีหน่วยความจำแยกกัน
- เข้าถึงสมาชิกด้วย
array[index].member
ตัวอย่างโปรแกรม: จัดการข้อมูลนักศึกษา
#include <stdio.h>
#include <string.h>
struct student {
int id;
char name[30];
float percentage;
};
int main() {
int i;
struct student record[3]; // array ขนาด 3 (แต่โค้ดเดิมเขียน record[2] แล้วใช้ index 0,1,2 -> ผิด ต้องเป็น record[3])
// เรคคอร์ดนักศึกษา 1
record[0].id = 1;
strcpy(record[0].name, "Bhanu");
record[0].percentage = 86.5;
// เรคคอร์ดนักศึกษา 2
record[1].id = 2;
strcpy(record[1].name, "Priya");
record[1].percentage = 90.5;
// เรคคอร์ดนักศึกษา 3
record[2].id = 3;
strcpy(record[2].name, "Hari");
record[2].percentage = 81.5;
// แสดงผล
for (i = 0; i < 3; i++) {
printf(" เรคคอร์ดนักศึกษา %d \\n", i+1);
printf(" รหัส: %d \\n", record[i].id);
printf(" ชื่อ: %s \\n", record[i].name);
printf(" เปอร์เซ็นต์: %f\\n\\n", record[i].percentage);
}
return 0;
}ผลลัพธ์
เรคคอร์ดนักศึกษา 1 รหัส: 1 ชื่อ: Bhanu เปอร์เซ็นต์: 86.500000 เรคคอร์ดนักศึกษา 2 รหัส: 2 ชื่อ: Priya เปอร์เซ็นต์: 90.500000 เรคคอร์ดนักศึกษา 3 รหัส: 3 ชื่อ: Hari เปอร์เซ็นต์: 81.500000
ข้อสังเกตสำคัญ
- ในโค้ดต้นฉบับ ประกาศ
record[2]แต่ใช้ index 0,1,2 -> buffer overflow ควรเป็นrecord[3] - ใช้
strcpyสำหรับ copy string เข้า char array - สามารถ initialize ได้โดยตรง:
struct student rec[3] = {{1,"A",80.0}, {2,"B",90.0}, {3,"C",85.0}}; - เมื่อส่ง array of structures ให้ฟังก์ชัน จะส่งเป็น pointer (decay) ไม่ copy ทั้ง array
การประยุกต์ใช้
- ฐานข้อมูลพนักงาน/นักศึกษา/สินค้า
- จัดการระเบียนข้อมูลที่มีโครงสร้างคงที่
- พื้นฐานของการ implement linked list, tree ด้วย array