อาเรย์

27 June 2015

ในบทนี้คุณจะได้เรียนรู้เกี่ยวกับอาเรย์ในภาษา C ซึ่งคุณได้เห็นการใช้งานของอาเรย์ไปบ้างแล้วในบทก่อนหน้า

อาเรย์ในภาษา C

อาเรย์ คือตัวแปรที่เก็บข้อมูลเป็นชุดข้อมูล โดยข้อมูลของอาเรย์จะเก็บในรูปแบบของลำดับข้อมูล โดยข้อมูลนั้นจะต้องเป็นประเภทเดียวกัน ในการประกาศอาเรย์ในภาษา C มันมีรูปแบบคือ:

type name[size];

โดย type คือประเภทของตัวแปรของอาเรย์ที่เราจะสร้าง name เป็นชื่อของตัวแปรอาเรย์ และ size เป็นขนาดของอาเรย์ การใช้อาเรย์ทำให้เราสามารถจัดการข้อมูลได้ง่ายขึ้น กว่าการใช้ตัวแปรธรรมดา มาดูตัวอย่างนี้

int n1 = 5;
int n2 = 10;
int n3 = 20;
int n4 = 30;
int n5 = 50;

ในตัวอย่างด้านบน เรามีตัวแปร 5 ตัวที่เก็บข้อมูลประเภท integer ไว้ นั่นดูเหมือนจะง่ายเพราะมีแค่ 5 ตัวถ้ามันมีเป็นจำนวนมาก การใช้อาเรย์จะช่วยให้เราสะดวกและแก้ปัญหานี้ได้ จากตัวอย่างข้างบนถ้านำมาสร้างเป็นตัวแปรอาเรย์จะได้แบบนี้

int n[5] = {5, 10, 20, 30, 50};

การประกาศอาเรย์

การประกาศอาเรย์นั้นคล้ายกับการประกาศตัวแปร เพราะว่าอาเรย์ก็เป็นตัวแปรประเภทหนึ่ง ดังนั้นในการที่จะใช้งานอาเรย์ เราจำเป็นที่จะต้องประกาศมันก่อน

int n[5];
char name[20];
double m[10];

ในตัวอย่างเราได้ทำการประกาศอาเรย์ โดยที่ยังไม่ได้กำหนดค่า โดยการประกาศใช้คล้ายกับตัวแปร โดยกำหนดประเภทของอาเรย์ ชื่อของอาเรย์ และสิ่งที่เพิ่มเข้ามาคือขนาดของอาเรย์ ซึ่งเป็นขนาดสูงสุดของอาเรย์ที่บรรจุได้ ในตัวแปรอาเรย์เมื่อมันถูกประกาศ เช่น int n[5] จะเป็นการประกาศตัวแปรประเภท integer มา 5 ตัว โดยในอาเรย์เราจะใช้ index ในการบอกตำแหน่ง เช่น n[0], n[1] ไปจนถึง n[4] นั่นคือ index ของอาเรย์จะเริ่มจาก 0 ถึง size-1 เสมอ

ต่อไปเราจะประกาศและกำหนดค่าให้กับอาเรย์ไปพร้อมกัน

int n[5] = {5, 10, 20, 30, 50};
char name[] = {'a', 'e', 'i', 'o', 'u'};
double m[10];
m[0] = 1.5;
m[1] = 4.3;
m[9] = 50.32;

ในตัวอย่างเราได้ประกาศและกำหนดค่าให้กับอาเรย์ ในตัวแปรอาเรย์ n เรากำหนดค่าให้ทั้งหมด 5 ค่า เพราะว่าเรากำหนด size ของอาเรย์เป็น [5] สำหรับในตัวแปร name เราสามารถกำหนดค่าให้กับตัวแปรอาเรย์ได้ โดยไม่ต้องบอก size ของอาเรย์ โดยภาษา C จะคำนวณให้เราอัตโนมัติ ส่วนตัวแปร m เราได้กำหนดค่าให้กับตัวแปรโดยการใช้อาเรย์ index

การอ่านค่าในอาเรย์

หลังจากที่ได้สร้างอาเรย์มาแล้ว เราจำเป็นต้องเข้าถึงค่าของอาเรย์ เพื่ออ่านค่าหรือแก้ไขค่าของมัน โดยการเข้าถึงค่าของอาเรย์จะต้องผ่าน index มาดูตัวอย่าง

int n[5] = {5, 10, 20, 30, 50};

จากการประกาศอาเรย์ด้านบน เราจะใช้ index 0 ถึง 4 ในการเข้าถึงค่าตามลำดับ โดย 0 เป็นอาเรย์ตัวแรก ดังนั้นถ้าเราต้องการเข้าถึงค่า 20 จึงใช้ n[2] ซึ่งคือตำแหน่งข้อมูลที่ 20 อยู่ มาดูตัวอย่างเพิ่มเติม

#include <stdio.h>

int main()
{
    int n[8] = {5, 10, 15, 20, 25, 30, 35, 40};

    printf("n[2] = %d\n", n[2]);
    printf("n[3] = %d\n", n[3]);

    n[2] = 99;
    printf("n[2] = %d\n", n[2]);
    return 0;
}

ในตัวอย่างเราได้สร้างตัวแปรอาเรย์ที่มีขนาดเป็น 8 และกำหนดค่าเริ่มต้นให้กับมัน ในตอนแรก เป็นการแสดงค่าของ n[2] และ n[3] คุณจะสังเกตุว่าค่าตรงกับที่ประกาศไว้ตอนแรก ต่อมาเราได้กำหนดค่าให้กับ n[2] ใหม่และดูอีกครั้ง ค่าจะเปลี่ยนไป และที่คือผลลัพธ์ของโปรแกรม

n[2] = 15
n[3] = 20
n[2] = 99

การใช้คำสั่ง for loop กับอาเรย์

เนื่องจากอาเรย์เป็นลำดับของตัวแปรและใช้ index ในการเข้าถึงข้อมูลมันจึงได้รับความนิยมในการใช้กับ for loop เพื่อที่จะเข้าถึงค่าในอาเรย์

#include <stdio.h>

int main()
{
    int n[8] = {5, 10, 15, 20, 25, 30, 35, 40};

    int i;
    for (i = 0; i < 8; i++)
    {
        printf("%d, ", n[i]);
    }

    printf("\n");

    for (i = 7; i >= 0; i--)
    {
        printf("%d, ", n[i]);
    }
    return 0;
}

ในตัวอย่างเราได้ใช้ for loop ในการอ่านค่าจากอาเรย์ โดยใช้ตัวแปร i เป็น index ของอาเรย์ อันแรกเป็นการอ่านค่าของอาเรย์แบบปกติ และแบบที่สองเราได้อ่านจากตำแหน่งสุดท้ายมายังตำแหน่งแรก นี่เป็นผลลัพธ์ของโปรแกรม

5, 10, 15, 20, 25, 30, 35, 40,
40, 35, 30, 25, 20, 15, 10, 5,

การใช้ for loop กับอาเรย์มีประโยชน์เป็นอย่างมาก เราสามารถที่จะใช้อ่านข้อมูลและใส่ข้อมูลก็ได้ ต่อไปมาลองว่าถ้าเราต้องการประกาศอาเรย์ 1000 ตำแหน่งและกำหนดค่า มันคงไม่ดีแน่ถ้าเราต้องใส่ค่าทีละอัน ดังนั้นเราจะใช้ for loop ช่วย

#include <stdio.h>

int main()
{
    int x[1000];

    int i;
    for (i = 0; i < 1000; i++)
    {
        x[i] = (i + 1) * 7;
    }
    return 0;
}

ในตัวอย่างเราได้ประกาศตัวแปรอาเรย์ x ที่มีขนาด 1000 และใช้ for loop ในการกำหนดค่าให้กับอาเรย์ โดยมันจะได้ผลลัพธ์เหมือนกับ

int x[1000] = {7, 14, 21, 28, 35, 42, ... , 7000};

ในตอนนี้คุณจะเห็นว่าการใช้ for มีประโยนช์กับอาเรย์เป็นอย่างมาก

อาเรย์ 2 มิติ

ในอาเรย์ที่คุณได้เรียนไปก่อนหน้า นั้นเรียกว่าอาเรย์ 1 มิติ ในภาษา C นั้นยังมีอาเรย์มากกว่า 1 มิติ ให้เราได้ใช้งาน โดยที่ใช้บ่อยก็คือ อาเรย์ 2 มิติ โดยอาเรย์สองมิติ ให้คุณจินตนาการว่ามันคือตาราง ซึ่งก็คืออาเรย์ของอาเรย์ 1 มิตินั่นเอง มาดูตัวอย่าง

int a[3][4] = {
    {35, 6, 1},
    {4, 5, 16},
    {9, 7, 92}
};

char b[5][10];

ในการอ่านค่าอาเรย์นั้นเหมือนกันกับการอ่านค่าอาเรย์ 1 มิติ แต่เราต้องใช้ index สองตัว คุณคงจะเคยเรียนเรื่อง matrix มาแล้ว เราใช้การเข้าถึงแบบนั้น แต่ว่าจำไว้ว่า index ของอาเรย์จะเริ่มจาก 0 เสมอ เหมื่อนที่ได้บอกไปก่อนหน้านี้ เช่น เลข 7 ในตัวแปรอาเรย์ a จะอยู่ที่ตำแหน่ง a[2][1] และเราก็ยังคงสามารถใช้ for loop ในการอ่านค่าทั้งหมดของอาเรย์ได้

#include <stdio.h>

int main()
{
    int a[3][3] =
    {
        {35, 6, 1},
        {4, 5, 16},
        {9, 7, 92}
    };

    int i, j;
    for (i = 0; i <3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d, ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

ในตัวอย่างเราได้ใช้ for loop ในการอ่านค่าของอาเรย์ และจะได้ผลลัพธ์ดังนี้

35, 6, 1,
4, 5, 16,
9, 7, 92,

อาเรย์หลายมิติ

ในภาษา C ยังมีอาเรย์ที่มากกว่า 2 มิติ คือ อาเรย์ 3 มิติ อาเรย์ 4 มิติ และมากว่านั้น แต่โดยส่วนมากแล้วเราไม่ค่อยที่จะได้ใช้มัน

double t[4][5][2];
int m[1][2][3][4];

ในบทนี้คุณได้เรียนรู้อาเรย์พื้นฐานของภาษา C

บทความนี้เป็นประโยชน์หรือไม่?Yes·No