May 11, 2019
Structure คือ โครงสร้างข้อมูลแบบหนึ่ง ที่รวมตัวแปรหลายๆ ตัวแปรไว้ด้วยกัน โดยที่ไม่จำเป็นต้องมีชนิดข้อมูล (Data type) เหมือนกัน
ลองนึกดูว่าถ้าเราต้องเก็บข้อมูลของ Laptop 10 เครื่อง ซึ่งประกอบไปด้วย ยี่ห้อ, รุ่น, หน่วยความจำ, ความจุ ssd และราคา เป็นต้น
ถ้าเราเขียนโปรแกรมปกติเราก็ต้องสร้างตัวแปร Array มาเก็บข้อมูลทุกประเภท
char brand[10][50];
char model[10][50];
int ram[10];
int ssd[10];
int price[10];
ซึ่งมันจะวุ่นวายมาก ซึ่งพระเอกของเราที่จะมาช่วยแก้ไขปัญหานี้ก็ คือ เจ้า Structure นั้นเอง
#include<stdio.h>
struct Laptop
{
//data_type var_name
char *brand;
char *model;
int ram;
int ssd;
int price;
};
จากโค้ดข้างบนนะครับ เราจะสร้าง Structure ชื่อ Laptop โดยที่ประกอบไปด้วยตัวแปร brand, model, ram, ssd, และ price ต่อมาเราจะนำ structure ไปใช้งานยังไงละ
เป็นโค้ดต่อเนื่องกันนะครับ เราจะประกาศ Structure และเข้าถึงข้อมูลใน Structue โดยการใช้ .(dot) ลองดูขโค้ดด้านล่างนะครับ
#include<stdio.h>
struct Laptop
{
char *brand;
char *model;
int ram;
int ssd;
int price;
};
int main(){
// struct structure_name var_name;
struct Laptop laptop;
//var_name.var_name_in_structure
laptop.ram = 8;
printf("%d", laptop.ram);
return 0;
}
แล้วไหนบอกว่าจะสามารถเก็บข้อมูลของ Laptop 10 เครื่องได้ง่ายขึ้นใช่มั้ยครับ ตอนนี้บางคนอาจจะนึกวิธีออกแล้วก็ได้ครับ เพราะ Structure มันใช้งานคล้ายๆกับตัวแปร (variable) พวก int float char เลยใช่มั้ยครับ
คำตอบ คือ เราก็แค่สร้าง array ของ Laptop เราก็จะสามารถเก็บข้อมูลของ Laptop 10 เครื่องได้ง่ายขึ้น มาลองสร้างกันเลยดีกว่า
#include<stdio.h>
struct Laptop
{
char *brand;
char *model;
int ram;
int ssd;
int price;
};
int main(){
// struct structure_name var_name[array_size];
struct Laptop laptop_list[10];
//var_name.var_name_in_structure
char brand[4] = "asus";
laptop_list[0].brand = brand;
laptop_list[0].ram = 8;
printf("brand: %s ram: %d GB\n",laptop_list[0].brand, laptop_list[0].ram);
return 0;
}
brand: asus ram: 8 GB
หลายคนอาจจะถามว่าทำไมต้องใช้ *char brand เพราะว่า เราต้องการใช้ brand ในการเก็บค่าชื่อยี่ห้อ ซึ่งเป็น string (array of char) แล้วทีนี้ถ้าเราประกาศ char brand[10] การที่เราจะเข้าถึงค่าข้อมูลใน Structure จะไม่สามารถทำได้โดยตรง