SKCONAN

การใช้งาน Structure เบื้องต้นในภาษา C

May 11, 2019

Structure คืออะไร ???

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 นั้นเอง

ตัวอย่าง การเขียน 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

เป็นโค้ดต่อเนื่องกันนะครับ เราจะประกาศ 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 of structure

คำตอบ คือ เราก็แค่สร้าง 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 จะไม่สามารถทำได้โดยตรง




© 2019, Built with