E N D
บทที่ 11 ข้อมูลแบบโครงสร้างและยูเนียน
การสร้างชนิดข้อมูล • ก่อนจะศึกษาชนิดข้อมูลแบบโครงสร้างและยูเนียนนั้น จะต้องรู้จักคำสั่งในการสร้างชนิดข้อมูลก่อน เพราะข้อมูลแบบโครงสร้างและยูเนียน จะใช้คำสั่งนี้สร้างขึ้นมา นั่นก็คือ typedef ผู้ใช้จะสามารถสร้างชนิดข้อมูลใหม่จากชนิดข้อมูลพื้นฐานที่มีอยู่เดิมแล้ว • รูปแบบ typedef [ชนิดข้อมูล] [ชื่อชนิดข้อมูลใหม่]; สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
ข้อมูลแบบโครงสร้าง การรวมตัวแปร ที่มีชนิดข้อมูลหลายแบบมารวมกันให้เป็นโครงสร้างเดียวกัน แล้วโครงสร้างนั้นก็จะมีชื่อประจำตัวของโครงสร้างนั้นด้วย แต่ละตัวแปรในโครงสร้าง จะเรียกว่าสมาชิก ซึ่งในหนึ่งโครงสร้างนั้นสามารถมีตัวแปรหรือสมาชิกได้ไม่จำกัด และแต่ละสมาชิกจะมีหน่วยความจำของตัวเอง สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การสร้างและกำหนดลักษณะของโครงสร้างการสร้างและกำหนดลักษณะของโครงสร้าง • การสร้างตัวแปรเป็นโครงสร้าง การสร้างตัวแปรเป็นโครงสร้าง จะมีรูปแบบดังนี้ struct { [รายชื่อสมาชิก] } [ชื่อของโครงสร้าง]; • การสร้างโครงสร้างเป็นชนิดข้อมูลใหม่ การสร้างโครงสร้างเป็นชนิดข้อมูลใหม่ ซึ่งโดยการใช้โครงสร้างจะนิยมใช้แบบนี้ เพราะโครงสร้างที่สร้างขึ้น จะเป็นชนิดข้อมูลใหม่อีกชนิดหนึ่ง ซึ่งสามารถนำสร้างตัวแปรได้ โดยมีรูปแบบดังนี้ typedef struct { [รายชื่อสมาชิก] } [ชื่อชนิดข้อมูลใหม่]; สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การกำหนดค่าเริ่มต้น • ผู้ใช้สามารถกำหนดค่าเริ่มต้นให้กับโครงสร้างได้ • ตัวอย่างแรกเป็นการกำหนดค่าให้กับแต่ละสมาชิก ส่วนตัวอย่างที่ 2 เป็นการกำหนดค่าให้บางสมาชิกของโครงสร้าง โดยค่าที่จะกำหนดให้จะเก็บลงในสมาชิก เรียงตามลำดับของโครงสร้างที่สร้างไว้ สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การเข้าถึงโครงสร้าง • หลังจากที่สร้างโครงสร้างได้แล้ว ต่อมาก็มาศึกษาการเข้าถึงสมาชิกแต่ละตัวในโครงสร้างที่สร้างขึ้น ซึ่งผู้ใช้สามารถที่จะเข้าถึงและกระทำต่อสมาชิกภายในโครงสร้างได้ โดยตัวอย่างการเข้าเข้าถึงสมาชิกแต่ละสมาชิกในโครงสร้าง Student ได้แสดงตัวอย่างด้านล่างนี้ • aStudent.id • aStudent.name • aStudent.gradePoints สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
พอยเตอร์ของโครงสร้าง สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
โครงสร้างซ้อนโครงสร้างโครงสร้างซ้อนโครงสร้าง • ตัวอย่าง สมมุติต้องการมีโครงสร้างที่ชื่อ stamp โดยต้องการจะเก็บ date และ time ไว้ภายใน date จะต้องเก็บ month, day และyear ส่วน time จะต้องเก็บ hour, minute และ second ซึ่งโครงสร้างของ stamp stamp.tme.sec stamp.date.month stamp.date stamp.tme สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การประกาศโครงสร้างซ้อนโครงสร้างการประกาศโครงสร้างซ้อนโครงสร้าง typedef struct { int month; int day; int year; } DATE; typedef struct { int hour; int min; int sec; } TIME; typedef struct { DATE date; TIME time; } STAMP; STAMP stamp; สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การเข้าถึงโครงสร้างซ้อนโครงสร้างการเข้าถึงโครงสร้างซ้อนโครงสร้าง • stamp • stamp.date • stamp.date.month • stamp.date.day • stamp.date.year • stamp.time • stamp.time.hour • stamp.time.min • stamp.time.sec สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
การกำหนดค่าเริ่มต้นโครงสร้างซ้อนโครงสร้างการกำหนดค่าเริ่มต้นโครงสร้างซ้อนโครงสร้าง • การกำหนดค่าเริ่มต้นให้กับโครงสร้างซ้อนโครงสร้าง จะมีกฎอยู่ว่า โครงสร้างที่อยู่ภายในโครงสร้างหลักจะต้องกำหนดค่าอยู่ในวงเล็บปีกกา และสมาชิกภายในโครงสร้างนั้นจะต้องคั่นด้วยเครื่องหมายลูกน้ำเท่านั้น ถ้าในโครงสร้างหลักมีสมาชิกข้างในเป็นโครงสร้างหลายสมาชิก จะต้องคั่นระหว่างสมาชิกด้วยเครื่องหมายลูกน้ำด้วย ดังเช่นตัวอย่างด้านล่างเป็นกำหนดค่าเริ่มต้นให้กับ โครงสร้าง stamp • STAMP stamo = {{05, 10, 1936}, {23, 45, 00}}; สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
โครงสร้างที่มีอาร์เรย์เป็นส่วนสมาชิกโครงสร้างที่มีอาร์เรย์เป็นส่วนสมาชิก • การประกาศโครงสร้างที่มีอาร์เรย์เป็นสมาชิก โครงสร้างสามารถมีอาร์เรย์เป็นสมาชิกได้ โดยการประกาศนั้นก็เหมือนกับการประกาศอาร์เรย์ทั่วไป • การเข้าถึงอาร์เรย์ในโครงสร้าง • student • student.name • student.name[i] • student.midterm • student.midterm[i] • student.final สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น
typedef union num { 16706 short num; char chAry[2]; chAry[0] chAry[1] } SH_CH2; A B SH_CH2 data; ข้อมูลแบบยูเนียน • ข้อมูลแบบยูเนียน (Union) เป็นข้อมูลที่มีลักษณะคล้ายกับข้อมูลแบบโครงสร้าง แต่ตัวแปรหรือสมาชิกต่าง ๆ ในยูเนียนนั้น จะใช้หน่วยความจำเดียวกัน คือจะมีตัวแปรหรือสมาชิกใดสมาชิกหนึ่งเท่านั้นที่ใช้หน่วยความจำในช่วงเวลานั้น • การเข้าถึงยูเนียน • data.num • data.chAry[0] สื่อชุดนี้เป็นลิขสิทธิ์ของสำนักพิมพ์วังอักษรใช้เพื่อการศึกษาเท่านั้น