ค่าคงที่

ค่าคงที่ในภาษา C

ค่าคงที่ (Constant) เป็นตัวแปรที่ไม่สามารถเปลี่ยนแปลงค่าในภายหลังได้ ค่าของตัวแปรค่าคงที่จะต้องถูกกำหนดพร้อมกับการประกาศตัวแปรเสมอ ค่าคงที่สามารถเป็นข้อมูลประเภทต่างๆ เหมือนประเภทข้อมูลพื้นฐานได้ เช่น Integer, Floating-point, Characters, Boolean, Pointers และ User-defined literals

Typed constant

ในภาษา C เราสามารถประกาศค่าคงที่ได้ โดยมีรูปแบบตามนี้

const data_type identifier = value;

การประกาศค่าคงที่นั้นเหมือนกับตัวแปร แต่แตกต่างคือต้องมีคำสั่ง const นำหน้า และต้องกำหนดข้อมูลให้กับค่าคงที่ทันทีเมื่อมันถูกสร้าง มาดูตัวอย่างการประกาศค่าคงที่ในภาษา C

const int myConstant = 100;
const float PI = 3.14;

ในตัวอย่างเราได้สร้างค่าคงที่สองตัว ตัวแรกมีประเภทข้อมูลเป็นแบบ Integer และมีชื่อว่า myConstant ตัวที่สองมีประเภทเป็น Floating-point number และมีชื่อว่า PI การใช้ค่าคงที่นั้นเหมือนกับการใช้ตัวแปร นี่เป็นตัวอย่างของการใช้งานที่รวมทั้งค่าคงที่และตัวแปร

#include <stdio.h>

int main()
{
    const float PI = 3.14;
    int r = 2;
    double result = 2 * PI * r;
    printf("Area of the circle is %f", result );
    return 0;
}

ในตัวอย่าง เราได้ประกาศค่าคงที่ PI ซึ่งเป็นอัตราส่วนระหว่างเส้นรอบวงและเส้นผ่านศูนย์กลางของวงกลม และนี่เป็นผลลัพธ์การทำงานของโปรแกรมข้างบน

Area of the circle is 12.56

ต่อไปมาดูตัวอย่างเพิ่มเติมของการใช้งานค่าคงที่ในภาษา C เราจะประกาศค่าคงที่และนำมาใช้ในการคำนวณทางวิทยาศาสตร์

#include <stdio.h>

int main()
{
    const float EARTH_GRAVITY = 9.801f;

    float time = 4.5;

    float velocity = EARTH_GRAVITY * time;
    float height = 0.5 * EARTH_GRAVITY * time * time;

    printf("Speed at the ground: %f m/s\n", velocity);
    printf("Building height: %f m\n", height);

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมในการคำนวณหาค่าของการเคลื่อนที่ในแนวดิ่ง โดยเรามีตัวแปรค่าคงที่ EARTH_GRAVITY สำหรับเก็บค่าแรงโน้มถ่วงของโลกที่มีค่าประมาณ 9.801 ในโปรแกรมนั้นเป็นการปล่อยลูกบอลจากตึกที่ไม่ทราบความสูง โดยมันใช้เวลา 4.5 วินาที ลูกบอลจึงตกกระทบพื้น คำถามก็คือเราต้องการหาความเร็วเมื่อลูกบอลกระทบพื้นและความสูงของตึกแห่งนี้ และเราใช้สูตรการคำนวณของการเคลื่อนที่ในแนวดิ่งสำหรับคำนวณหาค่าทั้งสอง

Speed at the ground: 44.131500 m/s
Building height: 99.295876 m

นี่เป็นผลลัพธ์การทำงานของโปรแกรมซึ่งจะแสดงความเร็วเมื่อลูกบอลกระทบพื้นและความสูงของตึก ภายใต้แรงโน้มถ่วงของโลกในค่าคงที่ EARTH_GRAVITY

ในทั้งสองตัวอย่างที่ผ่านมา คุณจะเห็นประโยชน์ของการใช้ค่าคงที่ในการเขียนโปรแกรม เราใช้ค่าคงที่กับค่าที่เราทราบว่ามันไม่สามารถเปลี่ยนแปลงได้ และเราใช้บ่อยๆ ในโปรแกรม และมันจะง่ายเมื่อคุณต้องการเปลี่ยนค่าเหล่านั้นเป็นค่าใหม่โดยคุณเปลี่ยนเพียงที่เดียวในโปรแกรม เช่น เมื่อคุณไม่ใช้ค่าคงที่คุณอาจจะต้องเขียน 9.801f ลงไปในทุกที่ในโปรแกรมที่ใช้ค่านี้อยู่

Preprocessor definitions

อีกทางหนึ่งในการสร้างค่าคงที่คือการใช้ Processor definitions ซึ่งเป็นการประกาศค่าคงที่ในรูปแบบของ Macro ถึงแม้ว่านี่จะไม่ได้เป็นค่าคงที่จริงๆ แต่ในการเขียนโปรแกรมในภาษา C นั้นเรานิยมที่จะใช้วิธีนี้มาก โดยมีรูปแบบดังนี้

 #define identifier replacement 

ในการประกาศค่าคงที่แบบ Marco เราใช้คำสั่ง #define ตามด้วยชื่อของค่าคงที่และค่าของมัน คำสั่งนี้จะกระทำโดย Preprocessor ก่อนที่โปรแกรมจะถูกคอมไพล์ มันไม่จำเป็นต้องใช้เครื่องหมายเซมิโคลอนในตอนท้าย การทำงานของมันคือจะแทนที่ทุกคำที่พบที่ตรงกับ identifier ให้เป็น replacement คุณสามารถดูได้จากตัวอย่างด้านล่าง

#include <stdio.h>

#define PI = 3.14

int main()
{
    int r = 2;
    double result = 2 * PI * r;
    printf("Area of the circle is %f", result );
    return 0;
}

มันเหมือนกันกับตัวอย่างก่อนหน้า แต่เราเปลี่ยนมาใช้วิธีของ Processor definitions แทน ต่อไปมาดูตัวอย่างการใช้งาน Processor definitions สำหรับการประกาศค่าคงที่ที่กำหนดขนาดของอาเรย์ในภาษา C

#include <stdio.h>

#define SIZE 10

int main()
{
    int number[SIZE];

    // Reading number to array
    int i;
    for (i = 0; i < SIZE; i++)
    {
        scanf("%d", &number[i]);
    }

    // Display array
    for (i = 0; i < SIZE; i++)
    {
        printf("number[%d] = %d\n", i, number[i]);
    }

    int sum = 0;
    int min = number[0];
    int max = number[0];

    for (i = 0; i < SIZE; i++)
    {
        sum += number[i];
        // Find minimum value in array
        if (number[i] > max)
        {
            max = number[i];
        }
        // Find maximum value in array
        if (number[i] < min)
        {
            min = number[i];
        }
    }

    printf("Sum = %d\n", sum);
    printf("Min = %d\n", min);
    printf("Max = %d\n", max);

    return 0;
}

ในตัวอย่าง เป็นโปรแกรมสำหรับเก็บตัวเลขลงไปในอาเรย์ หลังจากนั้นนำตัวเลขในอาเรย์มาแสดงผล รวมทั้งการหาผลรวมของตัวเลขทั้งหมดในอาเรย์ และค่าน้อยที่สุดและมากที่สุด ในตอนแรกเราใช้ Processor definitions สำหรับกระกาศค่าคงที่ SIZE ที่เป็นขนาดของอาเรย์ เมื่อโปรแกรมถูกคอมไฟล์นั้นจะทำการแทนที่ SIZE ที่พบในโปรแกรมด้วย 10 ทั้งหมด

หลังจากนั้น เราใช้คำสั่ง for loop เพื่อวนรับค่าตัวเลขเก็บลงไปในอาเรย์เป็นจำนวนที่ตรงกับขนาดของอาเรย์ SIZE และเราแสดงผลค่าภายในอาเรย์โดยการใช้คำสั่ง for loop เช่นเดียวกัน หลังจากนั้นเราหาผลรวม ค่าน้อยที่สุดและมากที่สุดในอาเรย์ สิ่งที่เราต้องการใช้คุณเห็นก็คือเราใช้ค่าคงที่ SIZE ซึ่งมันหมายถึง 10 ซึ่งเป็นขนาดของอาเรย์ที่เราได้กำหนดไว้ในตอนแรก ดังนั้นสิ่งที่ง่ายคือ คุณสามารถเปลี่ยนขนาดของอาเรย์ได้อย่าง่ายด้ายเพียงแค่ในบรรทัดทีเราประกาศค่าคงที่

10
-4
23
5
3
-8
9
-1
7
2
number[0] = 10
number[1] = -4
number[2] = 23
number[3] = 5
number[4] = 3
number[5] = -8
number[6] = 9
number[7] = -1
number[8] = 7
number[9] = 2
Sum = 46
Min = -8
Max = 23

และนี่เป็นผลลัพธ์การทำงานของโปรแกรมโดยการประกาศค่าคงที่ด้วย Processor Definitions สำหรับประกาศขนาดของอาเรย์

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการประกาศและใช้งานค่าคงที่ในภาษา C ทั้งวิธีพื้นฐานและโดยการใช้ Processor definitions รวมทั่งได้ทราบถึงประโยชน์ของการใช้งานค่าคงที่ในการเขียนโปรแกรม