อาร์เรย์ (Array) อาร์เรย์ (Array) เป็นตัวแปรชุดให้สำหรับเก็บข้อมูลที่มีความสัมพันธ์กัน โดยจะเก็บไว้ในชื่อเดียวกัน สมาชิกแต่ละตัวของ Array จะเรียกว่า Element หรือ Cell ตัวเลขที่ใช้ระบุตำแหน่งสมาชิกของ Array เรียกว่า Index หรือ Subscript ตัวอย่าง Array X ที่มี 5 Element ซึ่งจะเริ่มต้นตั้งแต่ Index 0 ถึง 4 ตัวแปรอาร์เรย์แบบ 1 มิติ อาร์เรย์หนึ่งมิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] ล้อมค่าตัวเลขจำนวนเต็ม เพื่อบอกจำนวนหน่วยข้อมูลที่ต้องการได้ในรูป ชนิดของตัวแปร ชื่อตัวแปร[จำนวนสมาชิกที่ต้องการ] data_type variable_name [ number-of-elements ] เช่น int a[5]; double x, y[10], z[3]; การกำหนดค่าเริ่มต้นให้อาร์เรย์ 1 มิติ ฃสามารถประกาศตัวแปร Array พร้อมกับกำหนดค่าเริ่มต้นให้กับสมาชิก Array ได้โดยมีรูปแบบดังนี้ ชนิดของตัวแปรอาร์เรย์ ชื่ออาร์เรย์[จำนวนข้อมูล] = {ค่าคงที่,ค่าคงที่,…}; อาร์เรย์ 2 มิติ ในตอนต้นที่กล่าวมาทั้งหมดนั้นจะเป็นอาร์เรย์เพียง 1 มิติเท่านั้น แต่ในงานบางอย่างต้องการข้อมูลที่อยู่ในลักษณ์ที่มากกว่า 1 มิติ อาร์เรย์ 2 มิตินั้นก็เปรียบเสมือนตารางนั้นที่ประกอบไปด้วยแถวและคอลัมน์ ในรูปที่ 8-13 แสดงตารางซึ่งสามารถเรียกได้เป็น อาร์เรย์ 2 มิติ ถึงแม้ว่าอาร์เรย์ 2 มิติที่แท้จริงนั้นแสดงในรูปที่ 8-13 แต่ในภาษา C จะมองเป็นในอาร์เรย์ 1 มิติอยู่ แต่จะใช้เลขลำดับของ Element เป็น 2 ตัว ตัวแรกเป็นแถวตัวที่ 2 เป็นคอลัมน์ ซึ่งลักษณะทางแนวความคิดของภาษา C ดังแสดงในรูปที่ 8-14 |
การประกาศและการกำหนดลักษณะของอาร์เรย์ 2 มิติ
อาร์เรย์ 2 มิติ จะเหมือนกับอาร์เรย์ 1 มิติ ในการประกาศและกำหนดลักษณะก่อนการใช้ จะเป็นตัวบอกให้คอมไพเลอร์รู้ว่า อาร์เรย์ที่สร้างมีชื่ออะไร มีชนิดข้อมูลของแต่ละ Element เป็นชนิดอะไร และมีขนาดของแต่ละมิติเป็นเท่าไร ดังตัวอย่างที่แสดงในรูปที่ 8-14 สามารถทำการประกาศและกำหนดลักษณะได้ดังนี้ int talbe [5] [4]; โดยตัวเลขตัวแรกจะบอกจำนวนของแถว และตัวเลขตัวที่ 2 จะบอกจำนวนของคอลัมน์ในแต่ละแถว การกำหนดค่าเริ่มต้น หลังจากที่ได้ทำการประกาศและกำหนดลักษณะของอาร์เรย์แล้วในแต่ละ Element ของอาร์เรย์จะยังไม่มีค่าบรรจุอยู่ ในการกำหนดค่าเริ่มต้นของ Element แต่ละตัวสามารถทำได้หลังจากการประกาศ ตัวอย่างสมมุติว่าต้องการใช้ 20 ค่า การกำหนดค่าเริ่มต้นแบบทางเดียวจะเป็นดังนี้ int table [5] [4]; = { 0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, 30, 31, 32, 33, 40, 41, 42, 43 }; หรือการกำหนดค่าเริ่มต้นให้กับอาร์เรย์ วิธีที่ดีที่สุดจะเป็นดังนี้ int table [5] [4]; { { 0, 1, 2, 3 }, {10, 11, 12, 13 }, {20, 21, 22, 23 }, {30, 31, 32, 33 }, {40, 41, 42, 43 } }; /* table */ การส่งค่าของอาร์เรย์ 2 มิติไปให้กับฟังก์ชัน การส่งค่าของอาร์เรย์ 2 มิติไปให้กับฟังก์ชันนั้น สามารถทำได้ 3 แบบ ดังนี้ 1. การส่งค่าแบบ Element เดียว (Passing Individual Elements) ซึ่งมีการกระทำเหมือนกับอาร์เรย์ 1 มิติ คือ ให้ลูปวนส่งค่าไปทีละ Element 2. การส่งค่าที่แถว (Passing a Row) เป็นการส่งค่าทั้งแถว โดยการใช้ลำดับของแถวเป็นตัวส่งไป ซึ่งแสดงในรูปที่ 8-15 ซึ่งพารามิเตอร์ที่รับจะเป็นอาร์เรย์ 1 มิติ ในฟังก์ชันที่ถูกเรียงก็จะใช้ลูป for เพียง 1ลูปในการทำงานเหมือนกับการส่งอาร์เรย์ 1 มิติมาให้ 3. การส่งค่าแบบทั้งอาร์เรย์ (Passing The Whole Array) เมื่อผู้ใช้ต้องการส่งค่าอาร์เรย์ 2 มิติไปให้กับฟังก์ชันอื่น จะใช้ชื่อของอาร์เรย์เป็นพารามิเตอร์ที่เป็นอาร์เรย์ 2 มิติ โดยมีตัวอย่างการประกาศฟังก์ชันดังนี้ Double average (int table[] [MAX_COLS]); ซึ่งจะสังเกตได้ว่าการประกาศพารามิเตอร์ที่เป็นอาร์เรย์ 2 มิติ ที่กำหนดแต่ขนาดของคอลัมน์ไว้เพียงเท่านั้น ซึ่งจะมีข้อกำหนดในการส่งค่าดังนี้ 1. เวลาจะส่งค่าไปให้กับฟังก์ชันที่ถูกเรียก ก็เพียงใช้ชื่อของอาร์เรย์เท่านั้น 2. ส่วนพารามิเตอร์ในฟังก์ชันที่ถูกเรียก จะต้องกำหนดให้มีชนิดข้อมูลเดียวกัน และเป็นอาร์เรย์ 2 มิติ โดยกำหนดแต่ขนาดของคอลัมน์เท่านั้น |
อาร์เรย์หลายมิติ
อาร์เรย์หลายมิติสามารถมีได้ตั้งแต่ 3 มิติ 4 มิติ หรือหลายมิติ ซึ่งในรูปทื่ 8-18 แสดงอาร์เรย์ที่มีมิติ 3 มิติ
ถึงแม้ว่าอาร์เรย์ 3 มิติ ที่แท้จริงจะเป็นดังในรูปที่ 8-18 แต่ในภาษา Cจะมองเป็นแบบอื่น คือ การสร้างอาร์เรย์ 3 มิติ จะสร้างจากอาร์เรย์ 2 มิติหลายอัน และอาร์เรย์ 2 มิติ ก็จะสร้างมาจากอาร์เรย์ 1 มิติ ฉะนั้นจะเรียกอาร์เรย์ 3 มิติ ว่าเป็นอาร์เรย์ของอาร์เรย์นั้นเอง ลักษณะที่ภาษา C มองกับอาร์เรย์ 3 มิติ
การประกาศและการกำหนดลักษณะของอาร์เรย์ 3 มิติ
อาร์เรย์หลายมิติจะเหมือนกับอาร์เรย์ 1 มิติ ในการประกาศและกำหนดลักษณะก่อนการใช้ ซึ่งการประกาศและกำหนดลักษณะนั้นจะเป็นตัวบอกให้คอมไพเลอร์รู้ว่า อาร์เรย์ที่สร้างมีชื่ออะไร มีชนิดข้อมูลของแต่ละ Element เป็นอะไร และมีขนาดของแต่ละมิติเป็นเท่าไร ซึ่งตัวอย่างที่แสดงในรูปที่ 8-19 สามารถทำการประกาศและกำหนดลักษณะได้ดังนี้
int table [3] [5][4];
การกำหนดค่าเริ่มต้น หลังจากที่ได้ทำการประกาศและกำหนดลักษณะของอาร์เรย์แล้วในแต่ละ Element ของอาร์เรย์จะยังไม่มีค่าบรรจุอยู่ ในการกำหนดค่าเริ่มต้นของ Element แต่ละตัวสามารถทำได้หลังจากที่การประกาศอาร์เรย์ โดยการกำหนดค่าเริ่มต้นสามารถทำได้ดังนี้
int table [3][5][4];
{
{ /* แผ่น 0 */
{ 0, 1, 2, 3}, /* แถว 0 */
3},
{10, 11, 12 13}, /* แถว 1 */
{20, 21, 22, 23},23} /* แถว 2 */
{30, 31, 32, 33}, /* แถว 3 */
{40, 41, 42, 43} /* แถว 4 */
},
อาร์เรย์หลายมิติสามารถมีได้ตั้งแต่ 3 มิติ 4 มิติ หรือหลายมิติ ซึ่งในรูปทื่ 8-18 แสดงอาร์เรย์ที่มีมิติ 3 มิติ
ถึงแม้ว่าอาร์เรย์ 3 มิติ ที่แท้จริงจะเป็นดังในรูปที่ 8-18 แต่ในภาษา Cจะมองเป็นแบบอื่น คือ การสร้างอาร์เรย์ 3 มิติ จะสร้างจากอาร์เรย์ 2 มิติหลายอัน และอาร์เรย์ 2 มิติ ก็จะสร้างมาจากอาร์เรย์ 1 มิติ ฉะนั้นจะเรียกอาร์เรย์ 3 มิติ ว่าเป็นอาร์เรย์ของอาร์เรย์นั้นเอง ลักษณะที่ภาษา C มองกับอาร์เรย์ 3 มิติ
การประกาศและการกำหนดลักษณะของอาร์เรย์ 3 มิติ
อาร์เรย์หลายมิติจะเหมือนกับอาร์เรย์ 1 มิติ ในการประกาศและกำหนดลักษณะก่อนการใช้ ซึ่งการประกาศและกำหนดลักษณะนั้นจะเป็นตัวบอกให้คอมไพเลอร์รู้ว่า อาร์เรย์ที่สร้างมีชื่ออะไร มีชนิดข้อมูลของแต่ละ Element เป็นอะไร และมีขนาดของแต่ละมิติเป็นเท่าไร ซึ่งตัวอย่างที่แสดงในรูปที่ 8-19 สามารถทำการประกาศและกำหนดลักษณะได้ดังนี้
int table [3] [5][4];
การกำหนดค่าเริ่มต้น หลังจากที่ได้ทำการประกาศและกำหนดลักษณะของอาร์เรย์แล้วในแต่ละ Element ของอาร์เรย์จะยังไม่มีค่าบรรจุอยู่ ในการกำหนดค่าเริ่มต้นของ Element แต่ละตัวสามารถทำได้หลังจากที่การประกาศอาร์เรย์ โดยการกำหนดค่าเริ่มต้นสามารถทำได้ดังนี้
int table [3][5][4];
{
{ /* แผ่น 0 */
{ 0, 1, 2, 3}, /* แถว 0 */
3},
{10, 11, 12 13}, /* แถว 1 */
{20, 21, 22, 23},23} /* แถว 2 */
{30, 31, 32, 33}, /* แถว 3 */
{40, 41, 42, 43} /* แถว 4 */
},