Tutorial

C Language 101 - Structure โครงสร้าง ฮ่ะ ? (EP.9)

By Arnon Puitrakul - 14 มิถุนายน 2015

C Language 101 - Structure โครงสร้าง ฮ่ะ ? (EP.9)

ก่อนจะเริ่มเนื้อหาของเรื่องนี้ ก็ต้องขอบคุณก่อนเลยครับ ที่อ่านมาเรื่อย ๆ จนถึงตอนนี้ ตอนนี้เราก็เดินทางกันมาจนจะจบแล้ว ขอบคุณมากจริง ๆ ครับ
เรามาเริ่มเรื่องของเราในวันนี้กันเลย วันนี้เราจะพูดถึง Structure หรือถ้าเอาภาษาไทยก็คือ โครงสร้าง ก่อนอื่นก็ต้องของเกริ่นก่อน

Structure คืออะไร ?

Structure คือโครงสร้างข้อมูลแบบนึง ที่เอาข้อมูลที่มีชนิดต่างกัน มาเก็บไว้ในโครงสร้างเดียวกัน แตกต่างจาก Array ที่เราเคยพูดกันไป เพราะว่าใน 1 Array จะเก็บข้อมูลได้แบบเดียวเท่านั้น เช่นเราบอกว่าให้ Array นี้เป็น int Member ทั้งหมดของ Array ก็จะต้องเป็น int หมด แต่กลับกัน Structure เราสามารถบอกว่า ให้ตัวนี้เป็น char ให้อันนี้เป็น int ได้ แล้วแต่เราเลย

แล้ว Structure เอามาทำอะไร ?

เมื่อกี้เรารู้กันไปแล้วว่า Structure นั้นคืออะไร แต่อาจจะยังนึกภาพไม่ออก ให้ลองนึกถึงทะเบียน นศ หรือ นร เราก็ได้ เล่น ๆ มันจะต้องมี ชื่อ นามสกุล เกรด อะไรแบบนี้ เจ้า Structure มันสามารถที่จะเก็บ 3 อย่างนี้ลงไปใน Structure เดียวได้เลย

struct Student
{
   char name [20];
   char surname [20];
   float grade;
};

จากตัวอย่างด้านบน เราสร้าง Structure ชื่อ Student ขึ้นมา เราบอกว่า ใน Student ก็จะมีตัวแปร name, surname และ grade อยู่ใน Structure Student อันเดียวกันได้เลย

ประกาศ Structure ยังไงล่ะ ?

เราลองมาดูรูปแบบของมันกันเลย

struct Name
{
   DataType No.1 VarName No.1
   ...
   DataType No.n VarName No.n
};

ตามด้านบนเลยครับ ก่อนอื่น เราก็ต้องใช้ Keyword คำว่า "struct" ก่อนเพื่อบอก Compiler ว่า นี่เราจะประกาศ Structure แล้วนะ แล้วตามด้วยชื่อของ Structure ถัดมาเปิดปีกกาเพื่อกำหนดขอบเขต
จากนั้นก็ประกาศรายละเอียดของ Structure ตามที่เราต้องการ ว่าจะมีอะไรอยู่ใน Structure นี้บ้าง Syntax เหมือนเราประกาศตัวแปรปกติเลย ถัดไปเกือบสุดท้าย ปิดปีกกา และอย่าลืม Semicolon ด้วยล่ะ

แต่เมื่อกี้เป็นเพียงแค่จุดเริ่มต้น

เมื่อกี้เราแค่บอกว่า Structure ตัวนี้มัน ชื่ออะไร ในนั้นมันจะมีอะไรบ้าง แต่เรายังใช้มันไม่ได้ เพราะเรายังไม่ได้สร้างมันออกมาจริง ๆ เมื่อกี้เหมือนเราแค่บอกพิมพ์เขียวมันเท่านั้น ตอนนี้เราจะเอาพิมพ์เขียวที่เราเขียนมาสร้างมันกัน ขอใช้ Structure Student ที่เคยเขียนไว้ข้างบนล่ะกัน

struct Student stu;

แค่นี้เลย บรรทัดเดียว เราแค่สร้าง Structure ที่จริง ๆ (ที่ไม่ใช่พิมพ์เขียวน่ะ) จาก Structure ที่ชื่อว่า Student โดยให้ Structure ก้อนนี้มีชื่อว่า stu เท่านั้นเอง ง่ายออกเนอะ !
Note : เราสามารถที่จะสร้าง Structure จากพิมพ์เขียวกี่อันก็ได้ ไม่จำกัดว่าจะเอามาสร้างได้กี่ครั้ง

การเข้าถึงข้อมูลใน Structure

เมื่อกี้ เราก็ได้สร้าง Structure กันไปแล้ว ทีนี้เรามาดูว่า เราจะทำงานกับมันยังไง หลัก ๆ แล้วทำงานกับตัวแปร เราก็ทำกับมันอยู่ได้ แค่ 2 อย่างเอง ก็คือ เรียกค่ามันออกมา กับ เปลี่ยนค่ามัน ซึ่งวิธีในการเข้าถึงค่าของมัน เราก็แค่ใช้ ชื่อ Structure ที่เราสร้าง (ที่สร้างจริง ๆ นะ ไม่ใช่พิมพ์เขียว) แล้วเติม . (Dot) ตามด้วยชื่อ สามาชิกของ Structure ที่เราต้องการ เช่นถ้า เราต้องการเข้าถึง name ใน Structure stu จากตัวอย่างข้างบน เราก็แค่บอกว่า

stu.grade = 3.22;
printf("%f",stu.grade);

เท่านี้เอง ง่ายนิดเดียวเองเนอะ ! ก็ใส่ชื่อ Structure ที่เราต้องการแล้วจุดแล้วใส่ Member ที่เราต้องการเข้าถึงเท่านั้นเอง เป็นอันจบ

Structure ซ้อน Structure

Member ของ Structure นอกจากเราใส่ตัวแปรธรรมดาลงไปได้แล้ว จริง ๆ เราจะใส่ Structure ซ้อนลงไปอีกก็ได้ เช่น

struct time
{
   int hour;
   int min;
   int sec;
};
struct checkIn
{
   char place [100];
   struct time checkTime;
};

ลองมาดูกันเลย ก่อนอื่นเราก็ประกาศ Structure ชื่อ time เพื่อเก็บรายละเอียดของเวลา พวก ชั่วโมง นาที วินาทีลงไป ถัดมา เราสร้าง Structure อีกตัวเพื่อเก็บประวัติการ Check-in ชื่อ checkIn ถ้าสังเกต Member ที่ชื่อ checkTime มันไม่ใช่ตัวแปรธรรมดานิ แต่มันเป็น อีก Structure นึงที่มาจาก time จริง ๆ เราสามารถเขียนอีกแบบก็จะได้

struct checkIn
{
   char place [100];
   struct time
   {
      int hour;
      int min;
      int sec;
   };
};

ซึ่งแบบนี้ก็ให้ผลไม่ต่างจากอันแรกเลย แต่ถ้าแนะนำ เขียนแบบแรกดีกว่า มันดูอ่านง่ายกว่าเยอะเลย

Array of Structure

เมื่อกี้เราก็ลองสร้าง Structure ซ้อน Structure กันไปแล้ว ด้วยตัวอย่าง Check-In แล้วถ้าสมมุติว่า เราต้องเขียนโปรแกรมที่ต้องเก็บประวัติการ Check-In ล่ะ ?
เพื่อการแก้ปัญหานี้ Array ก็จะเข้ามาช่วยเราได้ เราสามารถสร้าง Structure จากพิมพ์เขียวให้กลายเป็น Array of Structure ได้ Syntax จะเหมือนกับเราประกาศตัวแปรธรรมดาเลย ลองมาดูตัวอย่างกัน

struct checkIn checkHistory [100];

มีแค่นี้ล่ะครับ หมดแล้วกับเรื่องของ Structure สรุปเลยคือ Structure เป็นโครงสร้างข้อมูลประเภทนึงที่สามารถเก็บข้อมูลได้หลาย ๆ แบบใน Structure อันเดียว และยังสามารถเอา Structure ออกมาสร้างเป็น ตัว ๆ เดียว หรือ จะเอามา Implement เป็น Array ก็ได้ ด้วยความยืดหยุ่นของมันทำให้เราทำงานกับข้อมูลได้ง่ายขึ้นมาก ก่อนจะใช้เราก็ต้องสร้างมันขึ้นมาก่อน เหมือนกับสร้างพิมพ์เขียว ถัดมาเราถึงจะจับพิมพ์เขียวออกมาสร้างจริง (Implement) ถึงจะนำมันมาใช้ได้
สำหรับวันนี้ก็มีแค่นี้ล่ะครับ ตอนหน้าจะเป็นเรื่องอะไร ติดตามอ่านกันได้เลย ช่วงนี้กำลังปั่น Tutorial นี้ให้จบอยู่ ใกล้ล่ะ อีกไม่กี่ตอนก็น่าจะจบได้และ สำหรับวันนี้ก็ สวัสดีครับ ./.

Read Next...

สร้าง Book Tracking Library ด้วย Obsidian

สร้าง Book Tracking Library ด้วย Obsidian

เราเป็นคนที่อ่านกับซื้อหนังสือเยอะมาก ปัญหานึงที่ประสบมาหลายรอบและน่าหงุดหงิดมาก ๆ คือ ซื้อหนังสือซ้ำเจ้าค่ะ ทำให้เราจะต้องมีระบบง่าย ๆ สักตัวในการจัดการ วันนี้เลยจะมาเล่าวิธีการที่เราใช้ Obsidian ในการจัดการหนังสือที่เรามีกัน...

Garbage Collector บน Python ทำงานอย่างไร

Garbage Collector บน Python ทำงานอย่างไร

หากเราเรียนลงลึกไปในภาษาใหม่ ๆ อย่าง Python และ Java โดยเฉพาะในเรื่องของการจัดการ Memory ว่าเขาใช้ Garbage Collection นะ ว่าแต่มันทำงานยังไง วันนี้เราจะมาเล่าให้อ่านกันว่า จริง ๆ แล้วมันทำงานอย่างไร และมันมีเคสใดที่อาจจะหลุดจนเราต้องเข้ามาจัดการเองบ้าง...

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ติดตั้ง Zigbee Dongle บน Synology NAS กับ Home Assistant

ก่อนหน้านี้เราเปลี่ยนมาใช้ Zigbee Dongle กับ Home Assistant พบว่าเสถียรขึ้นเยอะมาก อุปกรณ์แทบไม่หลุดออกจากระบบเลย แต่การติดตั้งมันเข้ากับ Synology DSM นั้นมีรายละเอียดมากกว่าอันอื่นนิดหน่อย วันนี้เราจะมาเล่าวิธีการเพื่อใครเอาไปทำกัน...

โหลด CSV วิธีไหนเร็วที่สุด ?

โหลด CSV วิธีไหนเร็วที่สุด ?

เมื่อหลายวันก่อนมีพี่ที่รู้จักกันมาถามว่า เราจะโหลด CSV ยังไงให้เร็วที่สุด เป็นคำถามที่ดูเหมือนง่ายนะ แต่พอมานั่งคิด ๆ ต่อ เห้ย มันมีอะไรสนุก ๆ ในนั้นเยอะเลยนี่หว่า วันนี้เราจะมาเล่าให้อ่านกันว่า มันมีวิธีการอย่างไรบ้าง และวิธีไหนเร็วที่สุด เหมาะกับงานแบบไหน...