สารบัญ
หน้าที่ 9 - โครงสร้างสตรักเจอร์
8. โครงสร้างสตรักเจอร์ (Structure)
สตรักเจอร์ เป็นวิธีการเก็บตัวแปรหลากชนิดให้อยู่เป็นกลุ่มก้อนเดียวกัน ทำให้สามารถแยกโปรแกรมออกเป็นหน่วย (Modular Programming) ซึ่งแก้ไขได้ง่ายเพราะสามารถแยกฟังก์ชันและตัวแปรออกเป็นหน่วยๆ ซึ่งก็เป็นประโยชน์ในการสร้างฐานข้อมูลด้วย
การตั้งต้นสร้างสตรักเจอร์ สามารถทำได้หลายรูปแบบดังตัวอย่างต่อไปนี้
1) การใช้ คำสั่ง struct สร้างตัวแปรชนิด student_a ผ่านตัวแปร student
struct student
{
char *first;
char *last;
char SSN[9];
float gpa;
char **classes;
};
struct student student_a;
2) การใช้ คำสั่ง struct สร้างตัวแปรชนิด student_a โดยตรง
struct
{
char *first;
char *last;
char SSN[10];
float gpa;
char **classes;
} student_a;
3) การใช้ คำสั่ง typedef struct เพื่อสร้างตัวแปรชนิด student_a ผ่านตัวแปร student
typedef struct
{
char *first;
char *last;
char SSN[9];
float gpa;
char **classes;
} student;
student student_a;
การกำหนดชนิดตัวแปร ทำได้โดยใช้คำสั่ง typedef ตามหลักการใช้งานดังนี้
typedef type name (typedef ชื่อของชนิดตัวแปร ชื่อที่ใช้เรียกชนิดตัวแปรจริง)
ตัวอย่าง:
typedef int INTEGER;
INTEGER x; /* x คือตัวแปรตระกูล INTEGER */
typedef char *STRING;
STRING sarray[10];
/* sarray คือตารางอาเรย์ ของ char* ซึ่งเทียบได้กับการประกาศว่า
char *sarray[10] */
ในโครงสร้างตัวแปรที่อยู่ในรูป structure นั้นประกอบด้วยตัวแปรที่เกี่ยวข้องในลักษณะเดียวกับตารางอาเรย์ แม้จะไม่ใช้ตัวแปรประเภทเดียวกัน โดยจะแบ่งตัวแปรออกเป็น field โดยที่กลุ่มตัวแปรใน structure จะถือว่าเป็นส่วนหนึ่งของหน่วยใหญ่หน่วยเดียวกันดังที่แสดงในภาพที่ 8.1 ส่วนการเปรียบเทียบความแตกต่างระหว่าง ตารางอาเรย์และตัวแปร struct ที่มีตัวแปรที่เป็นตารางอาเรย์ จะแสดงให้เห็นในภาพที่ 8.2
การเรียกใช้งาน สตรักเจอร์
โดยปกติการสร้างสตรักเจอร์ ทำได้โดยใช้คำสั่ง typedef และ struct ซึ่งโครงสร้างภายในของสตรักเจอร์ จะประกอบด้วยตัวแปรต่างๆ ซึ่งแยกออกเป็น field ตัวแปรชนิดต่างๆ และในแต่ละ field จะมีการกำหนดพื้นที่หน่วยความจำ จนเพียงพอสำหรับแต่ละ field ดังตัวอย่างต่อไปนี้
typedef struct {
Type1 FieldName1;
Type2 FieldName2;
Type3 FieldName3;
/* as needed */
} VarName;
VarName คือชื่อชนิดตัวแปรสตรักเจอร์ทั้งหมด
นี่คือตัวอย่างการประกาศใช้ตัวแปร struct ชนิด student_t เพื่อบันทึกข้อมูลนักเรียน พร้อมตัวอย่างการกำหนดตัวแปร ชนิด student_t ซึ่งสามารถทำได้อย่างตัวแปรทั่วไป เช่นเดียวกับ int float
#define MAX_LEN 12 /* Length of name */
typedef struct {
char name[MAX_LEN];
int id;
float gpa;
char major[10];
} student_t;
student_t s;
student_t stu1, stu2, stu3;
การเข้าถึง ตัวแปร field ภายในตัวแปร struct ทำได้โดยการใช้ จุด (.)แล้วตามด้วยชื่อ field ดังตัวอย่างกรณีการเข้าถึงตัวแปร ชนิด DATE ที่จะแสดงให้เห็นดังต่อไปนี้ และผลที่ได้จะแสดงให้เห็นในภาพที่ 8.3
หลักการเข้าถึงตัวแปร struct: VarName.FieldName
typedef struct
{
int month, day, year;
} DATE;
void main() {
DATE d1;
d1.month = 12;
d1.day = 2;
d1.year = 1970;
}
เอาล่ะค่ะ ตอนนี้ ผู้อ่านก็คงจะพอเข้าใจการเขียนโปรแกรมภาษา C กันบ้างไม่มากก็น้อย แต่การรู้อย่างเดียวอาจจะไม่เพียงพอ ก็คงต้องหัดเขียน หัดทำประกอบกันไปด้วย เพื่อเพิ่มความเข้าใจ และเป็นการฝึกฝนการพัฒนาโปรแกรมคอมพิวเตอร์ในอีกทางหนึ่งด้วย สำหรับท่านใดที่ทดลองเขียน และพบปัญหา ก็สามารถ e-mail เข้ามาคุยกันได้นะค่ะ ที่ e-mail: cephsmile@gmail.com สำหรับบทความนี้ก็ขอจบแต่เพียงเท่านี้ค่ะ
*หมายเหตุ
งานเขียนชิ้นนี้ ได้รับการคุ้มครองสิทธิตามพระราชบัญญัติคุ้มครองสิทธิทางปัญญา โดยลิขสิทธิเป็นของผู้เขียน ที่ให้เกียรตินำเผยแพร่ผ่าน วิชาการ.คอม เรามีความยินดีและอนุญาตให้ทำซ้ำหรือเผยแพร่ต่อเพื่อประโยชน์ทางการศึกษาเท่านั้น กรุณาให้เกียรติผู้เขียน โดยอ้างชื่อผู้เขียนและ วิชาการ.คอม (www.vcharkarn.com) ทุกครั้งที่ทำการเผยแพร่ต่อ ห้ามนำส่วนหนึ่งส่วนใดไปเผยแพร่ต่อในสื่อที่เอื้อประโยชน์ทางธุรกิจก่อนได้รับอนุญาต ขอขอบคุณที่ร่วมกันช่วยสร้างให้สังคมไทยเป็นสังคมแห่งปัญญา
จำนวน 36 ความเห็น, หน้า่ |
1| -
2-
ความเห็นเพิ่มเติมที่ 19 19 ธ.ค. 2550 (20:29) คุณ pan.prempart ช่วยแจ้งลบความเห็นนี้แล้ว ขอบคุณค่ะ ตอบ ค.ห. ที่ 18 อ่ะคับ
ที่คอมไพล์ไม่ผ่านก็คงจะมาจากการเขียนรูปแบบของโปรแกรมผิด
ซึ่งอันที่จริงมันก็คงจะเป็นแค่เส้นผมบังภูเขาอยู่เท่านั้นแล
ค่อยๆหาจุดผิดพลาดนะคับ แล้วความผิดพลาดในคร้งนี้จะทำให้คุณจำมันจนขึ้นใจ
เป็นกำลังใจให้คับ
ความเห็นเพิ่มเติมที่ 20 22 ธ.ค. 2550 (12:17) ความเห็นที่ 18 นั้น ที่เขียนไม่ผ่าน อยู่บรรทัดแรกเลยครับ
#include
ตามจริงจะต้องเป็น
#include<ชื่อไดเรกทอรี่>
ชื่อไดเรกทอรี่ ก็มีเยอะ แต่ที่สำคัญที่สุดก็ stdio.h
ส่วนอื่นๆก็ยังมีอีกเยอะ ลองใช้ help ใน Turbo C ดูครับ (แบบDosนะ)
แบบDos จะใช้ง่ายที่สุดแล้ว ที่ผมเขียนมา
ความเห็นเพิ่มเติมที่ 21 24 ธ.ค. 2550 (23:19) เขียนโปรพอได้บ้างครับแต่ติดที่ภาษาแบบ งง ม๊ากมากทำงัยดี
ความเห็นเพิ่มเติมที่ 22 30 ธ.ค. 2550 (23:11) ขอบคุณมากๆครับ เพิ้งหัดศึกษา
ความเห็นเพิ่มเติมที่ 23 10 ม.ค. 2551 (04:00) คห ที่ 14
ใช้ software จาก หุ่นยนต์นั้นแหละ ง่ายที่สุด ครับ
เพราะผมก็ทำเหมือนกัน มันก็ละเอียดเช่นกันครับ
ปัญหาของหุ่นยนต์อยู่ที่ตัวแปรของอุปสรรคที่ไม่คงที่ครับเช่น
กำหนดให้ แสงน้อยเดินซ้าย ปรากฏว่า บริเวณนั้น มีหลอดไฟส่องอยู่ไม่ตรงตามที่กำหนดไว้
หุ่นยนต์ก็ผ่านไปครับ
เล็งแม่นๆ ตั้งค่าให้กว้างที่สุดเท่าที่จะทำได้
สำคัญอีกส่วนการออกแบบ ครับต้องให้เซ็นเซอร์ เสถียรไว้ก่อน ไม่โยกไปมา เพราะอ่านค่าแปลกไปครับ
ผมลองมาแล้ว ถ้าแสงบนสนามไม่เสถียรแล้วไม่แก้ไขหละก้อ
ดวงล้วนๆ ครับ
ความเห็นเพิ่มเติมที่ 24 21 ก.พ. 2551 (10:38) เติมตัวเลขเข้าไป ๒ จำนวน แล้วรายงานได้ว่าตัวเลขนั้นเท่ากันหรือไม่เท่ากัน
เขียนอย่างไรครับ
ความเห็นเพิ่มเติมที่ 25 16 มี.ค. 2551 (10:15)
ต้องขอขอบคุณเป็นอย่างมากเลยครับ ผมเคยเรียนมานานมากแล้ว ไม่รู้ว่าในสมองจะเหลือความจำบ้างหรือเปล่า ขอบคุณอีกครั้ง
ความเห็นเพิ่มเติมที่ 26 31 มี.ค. 2551 (15:56) ก็น่าสนใจน๊ะครับ แต่ถ้ายังไงผมแนะนำให้ไปดูเพิ่มเติมที่
citecclub.org แล้วจะได้อะไรเพิ่มขึ้นอีกมายมายมากกว่าที่คุณคิดน๊ะครับ
แค่คุณคิดจาสมัครก็ไม่ธรรมดาแล้ว แต่เนื้อหาแน่นน่าชมอย่างงมาก
เชื่อว่าคุณๆ จะต้องไม่ผิดหวังครับ
Os
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 150 ดวง - โหวตเพิ่มดาว
ความเห็นเพิ่มเติมที่ 27 23 เม.ย. 2551 (15:21) ขอบคุณมากครับ
ความเห็นเพิ่มเติมที่ 28 15 พ.ค. 2551 (01:24) คุณ ช่วยแจ้งลบความเห็นนี้แล้ว ขอบคุณค่ะ ขอบคุณมากค่ะ ได้ความรู้มากเลย
ตอนนี้มีเรียนเรื่องนี้อยู่แต่เพิ่งเปิดเทอมยังไม่ได้ซื้อหนังสือเลยค่ะ ><"
ความเห็นเพิ่มเติมที่ 29 17 พ.ค. 2551 (13:08) ไม่เคยเข้าไปชมเว็บ ก็ดีครับ
ความเห็นเพิ่มเติมที่ 30 17 พ.ค. 2551 (13:26) ช่วยแนนำตัวprogram run ภาษา ซี
ความเห็นเพิ่มเติมที่ 31 20 พ.ค. 2551 (12:19) ตอบคำถาม นะครับ
คำถามที่ 16 ภาษา C เป็นภาษาโครงสร้างครับ แต่ java ถ้าจะให้ถูกหลักต้องเขียนเป็น OOP ครับ
คำถาม 17 ตัวแปรเกิดจากผู้เขียน สร้างขึ้นมาเองนะครับ ดังนั้น การสร้างขึ้นมาผู้เขียนโปรแกรมต้องจำได้สิครับ ที่คุณว่าหมายถึงคำสั่งป่ะครับ
คำถามที่ 18 คุณเขียนแค่นั้นไม่ได้หรอกครับ คุณต้องใช้ <Stdio.h> ตามหลัง include ด้วยครับ เพราะคุณมีการเรียกใช้ คำสั่งในการแสดงผล printf
คำถามที่ 30 ตัวโปรแกรม TC3 ครับ หรือ Turbo C++ ก็ได้ TC3 นี่ไม่ต้อง install Copy ลงไปแล้วเซ็ตาค่านิดหน่อยใช้ได้เลย ส่วน Turbo C++ install ใช้เหมือนโปรแกรมทั่วไป
goah
ร่วมแบ่งปันความรู้และความเห็นแล้ว 1 ครั้ง - ได้รับดาวแล้ว 50 ดวง - โหวตเพิ่มดาว
ความเห็นเพิ่มเติมที่ 32 4 มิ.ย. 2551 (10:19) การรัน คอมไพเลอร์ ระบบ boardland และระบบ turbo c อันไหนดีก่ากันคับ
ความเห็นเพิ่มเติมที่ 33 4 มิ.ย. 2551 (10:44) ผมก็เพิ่งเคยเขียนภาษา C
ผมจะลองเขียนให้ดูง่ายๆนะคับผิดตรงไหนก็ต้องขอโทษด้วยจริงๆ
#include<stdio.h>
void main()
{
int num1,num2,num3;
char[20] no1;
printf("\t\t\t\============\n");
printf("\t\t\t\t\TEST\n");
printf("\t\t\t\============\n");
printf("NUMBER 1 : ");
scanf("%d",num1);
printf("PLEASE + - * / ");
scanf("%d",no1);
printf("NUMBER 2 : ");
scanf("%d",num2);
{
if no1="+"
printf("ANSWER IS : ",num1+num2);
elseif no1="-"
printf("ANSWER IS : ",num1-num2);
elseif no1="*"
printf("ANSWER IS : ",num1*num2);
else
printf("ANSWER IS : ",num1/num2);
}
ผมว่าน่าจะผิดเยอะช่วยหาที่ผิดหน่อยนะคับ
ความเห็นเพิ่มเติมที่ 34 5 มิ.ย. 2551 (13:39)
ผมเด็กใหม่ แต่อยากเรียนภาษา c คับ ช่วยสอนผมหน่อยอยากเขียนโปรแกรมเป็นคับ "."
ความเห็นเพิ่มเติมที่ 35 9 มิ.ย. 2551 (16:34) กระผมขอขอบคุณเป็นอย่างมากๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ
ถ้ากระผมเข้าใจกระผมจะไม่ลืมพระคุณเลยขอรับ
ความเห็นเพิ่มเติมที่ 37 17 มิ.ย. 2551 (16:55) สวัสดีครับพี่ๆช่วยผมหน่อยนะครับ ผมอยากเขียนภาษา c
เป็นครับ audsadee@hotmail.com
ความเห็นเพิ่มเติมที่ 38 17 มิ.ย. 2551 (23:32) <P>#include<stdio.h></P>
<P>#include<conio.h></P>
<P>main(){</P>
<P> printf("Hello\nMy name is DotA.\n");</P>
<P> //printf();</P>
<P> printf("Good Bye");</P>
<P> getch();</P>
<P> }</P>
<P> </P>
<P>พอได้ป่าวคับ :)</P>