ชนิดของข้อมูล
(data type) ในการเขียนโปรแกรมหนึ่งๆ
จะมีข้อมูลต่างๆ เข้ามาเกี่ยวข้องเช่น
การนับจำนวนรอบ (loop) ของการทำงานโดยใช้ข้อมูลชนิดจำนวนเต็ม หรือการแสดงข้อความ
โดยใช้ข้อมูลชนิดตัวอักษร จะเห็นว่าข้อมูลต่างๆ ถูกแบ่งออกเป็นหลายชนิดตามจุดประสงค์ของการใช้งาน
นอกจากนี้ข้อมูลแต่ละชนิด ยังใช้เนื้อที่หน่วยความจำ (memory) ไม่เท่ากันจึงมีการแบ่งชนิดของข้อมูล
ดังแสดงในตารางด้านล่าง
ตัวแปร (variable) เนื่องจากข้อมูลถูกเก็บอยู่ในหน่วยความจำ การอ้างถึงตำแหน่งของข้อมูลนี้
จึงมีความซับซ้อน ไม่สะดวกต่อการเขียนโปรแกรม จึงมีการเรียกหน่วยความจำ ในตำแหน่งที่สนใจผ่านตัวแปร
การประกาศตัวแปร (variable declaration) คือการจองเนื้อที่ในหน่วยความจำสำหรับเก็บค่าบางอย่าง
พร้อมทั้งกำหนดชื่อเรียกแทนหน่วยความจำในตำแหน่งนั้นเพื่อให้ผู้เขียนโปรแกรมมีความสะดวกในการเข้าถึง
ค่าที่เก็บอยู่ในหน่วยความจำดังกล่าว
รูปแบบการประกาศตัวแปร
การนับจำนวนรอบ (loop) ของการทำงานโดยใช้ข้อมูลชนิดจำนวนเต็ม หรือการแสดงข้อความ
โดยใช้ข้อมูลชนิดตัวอักษร จะเห็นว่าข้อมูลต่างๆ ถูกแบ่งออกเป็นหลายชนิดตามจุดประสงค์ของการใช้งาน
นอกจากนี้ข้อมูลแต่ละชนิด ยังใช้เนื้อที่หน่วยความจำ (memory) ไม่เท่ากันจึงมีการแบ่งชนิดของข้อมูล
ดังแสดงในตารางด้านล่าง
ตัวแปร (variable) เนื่องจากข้อมูลถูกเก็บอยู่ในหน่วยความจำ การอ้างถึงตำแหน่งของข้อมูลนี้
จึงมีความซับซ้อน ไม่สะดวกต่อการเขียนโปรแกรม จึงมีการเรียกหน่วยความจำ ในตำแหน่งที่สนใจผ่านตัวแปร
การประกาศตัวแปร (variable declaration) คือการจองเนื้อที่ในหน่วยความจำสำหรับเก็บค่าบางอย่าง
พร้อมทั้งกำหนดชื่อเรียกแทนหน่วยความจำในตำแหน่งนั้นเพื่อให้ผู้เขียนโปรแกรมมีความสะดวกในการเข้าถึง
ค่าที่เก็บอยู่ในหน่วยความจำดังกล่าว
รูปแบบการประกาศตัวแปร
Type varible name
โดย
type คือชนิดของตัวแปร
(ตามตารางด้านล่าง)
variable-name คือชื่อของตัวแปร (ควรตั้งชื่อให้มีความหมายสอดคล้องกับการใช้งานและจำง่าย)
variable-name คือชื่อของตัวแปร (ควรตั้งชื่อให้มีความหมายสอดคล้องกับการใช้งานและจำง่าย)
ตัวอย่างการประกาศตัวแปรแบบต่างๆ
int num; /*ประกาศตัวแปรชนิิดจำนวนเต็ม
ชื่อ num*/
float x;
char grade, sex; /*ประกาศตัวแปรชนิิดอักขระ ชื่อ grade และ sex (ประกาศพร้อมกันในบรรทัดเดียว)*/
float x;
char grade, sex; /*ประกาศตัวแปรชนิิดอักขระ ชื่อ grade และ sex (ประกาศพร้อมกันในบรรทัดเดียว)*/
float temp = 123.45; /*ประกาศตัวแปรชนิดเลขทศนิยมพร้อมกำหนดค่า
123.45*/
char c = "A", t = "B"; /*ประกาศตัวแปรชนิดอักขระสองตัว พร้อมกำหนดค่าให้แต่ละตัว*/
int oct = 0555; /*ประกาศตัวแปรชนิดจำนวนเต็มชื่อ num พร้อมกำหนดค่าคือ 555 (เป็นเลขฐานแปดเพราะมี 0 นำหน้า)*/
int hex = 0x88; /*ประกาศตัวแปรชนิดจำนวนเต็มชื่อ hex พร้อมกำหนดค่าคือ 88 (เป็นเลขฐาน 16 เพราะมี 0x นำหน้า)*/
char c = "A", t = "B"; /*ประกาศตัวแปรชนิดอักขระสองตัว พร้อมกำหนดค่าให้แต่ละตัว*/
int oct = 0555; /*ประกาศตัวแปรชนิดจำนวนเต็มชื่อ num พร้อมกำหนดค่าคือ 555 (เป็นเลขฐานแปดเพราะมี 0 นำหน้า)*/
int hex = 0x88; /*ประกาศตัวแปรชนิดจำนวนเต็มชื่อ hex พร้อมกำหนดค่าคือ 88 (เป็นเลขฐาน 16 เพราะมี 0x นำหน้า)*/
ข้อควรระวัง!!
ชื่อตัวแปรจะต้องขึ้นต้นด้วยตัวอักษรหรือเครื่องหมาย
"_" เท่านั้น
ภายในชื่อตัวแปรให้ใช้ตัวอักษร, ตัวเลข 0-9 หรือเครื่องหมาย
"_"
ห้ามมีช่องว่างในชื่อตัวแปร
อักษรตัวพิมพ์เล็ก-ใหญ่ มีความแตกต่างกัน (case sensitive) เช่น Name, NAME และ name
ถือเป็นชื่อที่แตกต่างกัน
ถือเป็นชื่อที่แตกต่างกัน
ห้ามซ้ำกับชื่อตัวแปรสงวน (reserved
word)
ตัวแปรชนิดข้อความ
(string)
ถ้าเราต้องการเก็บข้อความ
"C programming
language" ไว้ในตัวแปร จะทำได้อย่างไร?
ที่ผ่านมาเราทราบว่าเราสามารถเก็บข้อมูลชนิดตัวอักขระไว้ในตัวแปรชนิด char ได้ แต่ตัวแปรชนิด char นั้น
สามารถเก็บตัวอักขระได้เพียงตัวเดียวเท่านั้น ไม่สามารถเก็บทั้งข้อความได้ แล้วเราจะแก้ปัญหาได้อย่างไร?
หากพิจาณาให้ดี ข้อความดังกล่าวประกอบด้วยตัวอักขระ (ตัวอักษร+สัญลักษณ์) หลายๆ ตัวเรียงต่อกันเป็นสาย
ซึ่งเป็นลักษณะของตัวแปรแบบ array (จะได้กล่าวภายหลัง)
การประกาศตัวแปรแบบ array เพื่อเก็บข้อมูลดังกล่าวสามารถทำได้ดังนี้
ที่ผ่านมาเราทราบว่าเราสามารถเก็บข้อมูลชนิดตัวอักขระไว้ในตัวแปรชนิด char ได้ แต่ตัวแปรชนิด char นั้น
สามารถเก็บตัวอักขระได้เพียงตัวเดียวเท่านั้น ไม่สามารถเก็บทั้งข้อความได้ แล้วเราจะแก้ปัญหาได้อย่างไร?
หากพิจาณาให้ดี ข้อความดังกล่าวประกอบด้วยตัวอักขระ (ตัวอักษร+สัญลักษณ์) หลายๆ ตัวเรียงต่อกันเป็นสาย
ซึ่งเป็นลักษณะของตัวแปรแบบ array (จะได้กล่าวภายหลัง)
การประกาศตัวแปรแบบ array เพื่อเก็บข้อมูลดังกล่าวสามารถทำได้ดังนี้
type variable-name[size];
โดย
size คือขนาดของข้อความ+1 โดยขนาดที่เพิ่มขึ้นเพราะต้องเก็บอักขระสุดท้ายของข้อความเป็นอักขระ
\0 หรือ NULL เพื่อบอกว่าสิ้นสุดข้อความแล้ว
\0 หรือ NULL เพื่อบอกว่าสิ้นสุดข้อความแล้ว
ตัวอย่างการประกาศตัวแปรแบบ
array เพื่อเก็บข้อความ
"C programming
language" (22 ตัวอักษร)
ทำได้หลายวิธีดังนี้
ทำได้หลายวิธีดังนี้
char[23] text = "C programming
language";
/*กำหนดขนาดเพิ่มขึ้น 1 ตัว สำหรับเก็บค่า \0 หรือ NULL ในตำแหน่งสุดท้าย*/
char[23] text = {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','l','a','n','g','u','a','g','e','\0'};
/*กำหนดขนาดเพิ่มขึ้น 1 ตัว สำหรับเก็บค่า \0 หรือ NULL ในตำแหน่งสุดท้าย*/
char[] text = "C programming language";
/*ถ้าไม่กำหนดขนาดของ array แล้ว ตัวแปรภาษาซีจะกำหนดให้โดยมีขนาดเท่ากับขนาดข้อความ+1*/
/*กำหนดขนาดเพิ่มขึ้น 1 ตัว สำหรับเก็บค่า \0 หรือ NULL ในตำแหน่งสุดท้าย*/
char[23] text = {'C',' ','p','r','o','g','r','a','m','m','i','n','g',' ','l','a','n','g','u','a','g','e','\0'};
/*กำหนดขนาดเพิ่มขึ้น 1 ตัว สำหรับเก็บค่า \0 หรือ NULL ในตำแหน่งสุดท้าย*/
char[] text = "C programming language";
/*ถ้าไม่กำหนดขนาดของ array แล้ว ตัวแปรภาษาซีจะกำหนดให้โดยมีขนาดเท่ากับขนาดข้อความ+1*/
นอกจากนี้เรายังสามารถแก้ไขตัวอักษรที่เก็บอยู่ใน
array ได้โดยการอ้างอิงตำแหน่งเช่น
text[0] = 'A'; /*แก้ตัวอักษรตัวแรก
(เริ่มนับจาก 0) จะได้ผลลัพธ์คือ
A programming
language*/
text[2] = ' '; /*ผลลัพธ์คือ
A
rogramming language (ใส่ช่องว่างแทนตัว p)*/
ชนิดของตัวแปร
|
ขนาด (bits)
|
ขอบเขต
|
ข้อมูลที่เก็บ
|
char
|
8
|
-128 ถึง
127
|
ข้อมูลชนิดอักขระ
ใช้เนื้อที่ 1 byte
|
unsigned
char
|
8
|
0 ถึง
255
|
ข้อมูลชนิดอักขระ
ไม่คิดเครื่องหมาย
|
int
|
16
|
-32,768 ถึง
32,767
|
ข้อมูลชนิดจำนวนเต็ม
ใช้เนื้อที่ 2 byte
|
unsigned
int
|
16
|
0 ถึง
65,535
|
ข้อมูลชนิดจำนวนเต็ม
ไม่คิดเครื่องหมาย
|
short
|
8
|
-128 ถึง
127
|
ข้อมูลชนิดจำนวนเต็มแบบสั้น
ใช้เนื้อที่ 1 byte
|
unsigned
short
|
8
|
0 ถึง
255
|
ข้อมูลชนิดจำนวนเต็มแบบสั้น
ไม่คิดเครื่องหมาย
|
long
|
32
|
-2,147,483,648
ถึง 2,147,483,649
|
ข้อมูลชนิดจำนวนเต็มแบบยาว
ใช้เนื้อที่ 4 byte
|
unsigned
long
|
32
|
0 ถึง
4,294,967,296
|
ข้อมูลชนิดจำนวนเต็มแบบยาว
ไม่คิดเครื่องหมาย
|
float
|
32
|
3.4*10e(-38)
ถึง
3.4*10e(38)
|
ข้อมูลชนิดเลขทศนิยม
ใช้เนื้อที่ 4 byte
|
double
|
64
|
3.4*10e(-308)
ถึง
3.4*10e(308)
|
ข้อมูลชนิดเลขทศนิยม
ใช้เนื้อที่ 8 byte
|
long
double
|
128
|
3.4*10e(-4032)
ถึง
1.1*10e(4032)
|
ข้อมูลชนิดเลขทศนิยม
ใช้เนื้อที่ 16 byte
|
type variable-name[size];
ไม่มีความคิดเห็น:
แสดงความคิดเห็น