Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Array of Structures ในภาษา C

ความหมาย

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