ค่าคงที่(constant)

ค่าคงที่ในภาษา 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 รวมทั่งได้ทราบถึงประโยชน์ของการใช้งานค่าคงที่ในการเขียนโปรแกรม