컴퓨터/C
프로그래밍을 하면 프로그래머는 다양하게 프로그램 안의 데이터를 사용하고 변환시킬 수 있습니다.
프로그램의 양이 방대해질수록 프로그래머가 제어해야 될 데이터들을 엄청나게 많아집니다.
만약 원을 계산하기 위한 다양한 프로그램을 만든다고 가정을 하면, 원주율(파이) 값을 많이 사용을 할 것입니다.
이런 원주율 값을 프로그래머가 사용을 하려면 크게 2가지 방법이 있을 것입니다.
자주 사용하게 된다면 직접 3.14 1592라고 치는 것보다 변수를 선언에서 사용하는 게 효율적일 겁니다.
하지만 우리가 변수를 사용하게 된다면 고의든 실수든 이 값을 변경할 수 있는 가능성이 있습니다. 원주율(파이)의 값은 불변하는 절대적인 값인데 말이죠.
이런 상황을 프로그램의 설계부터 방지하기 위해 사용하는 것이 바로 const키워드입니다.
어떠한 변수를 사용할 때 const키워드를 사용함으로써 그 변수의 값을 변화시키지 못하도록 하는 것이죠.
3.141592; // 일반 상수의 표현
double PI = 3.141592; // 변수를 이용한 표현
const double PI = 3.141592; //const 키워드를 이용한 변수의 상수화
실제로 이 const 키워드를 통해 어떤 식으로 제어가 되는지 알아보도록 하겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
printf("그냥 상수를 출력해 보도록 하겠습니다 : %lf", 3.141592);
double PI = 3.141592;
printf("그냥 변수 안의 값 출력해 보도록 하겠습니다 : %lf", PI);
PI = 4;
printf("이런경우 값의 변경이 가능합니다. : %lf", PI);
const double PI_const = 3.141592; //const를 쓸 경우 반듯이 선언과 동시에 초기화를 해야된다
printf("const 키워드를 사용한 출력 : %lf", PI_const);
// PI_const = 5; error 발생! (이미 const를 통해 고정되어 불변의 값이 됨)
}
포인터 변수는 일반 변수들과는 달리 2가지 기능을 하고 있습니다.
이런 특성 때문에 포인터 변수에 2가지 기능에 각각 선언하여 아래와 같은 기능으로 할 수 있습니다.
다양한 곳에서 많이 활용되고 있으니 이 개념을 정확하게 이해하고 넘어가길 권장합니다.
const int* const a;
const int* a;
int* const a;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 100;
int b = 10;
const int* const p = &a;
//저장된 메모리 주소 변경 불가능 !
// p = &b; // error 발생
//저장된 메모리 주소 안의 데이터 변경 불가능 !
// *p = 10; // error 발생
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 100;
int b = 10;
const int* p = &a;
printf("포인터변수 p를 통에 저장된 메모리 주소 안의 데이터 : %d\n", *p);
p = &b;
printf("포인터변수 p를 통에 저장된 메모리 주소 안의 데이터 : %d\n", *p);
//저장된 메모리 주소 안의 데이터 변경 불가능 !
// *p = 10; // error 발생
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 100;
int b = 10;
int* const p = &a;
printf("변수 a의 값: %d\n", a);
*p = 10;
printf("변수 a의 값: %d\n", a);
//저장된 메모리 주소 안의 데이터 변경 불가능 !
// *p = 10; // error 발생
}
이런 식으로 const 키워드를 사용함으로 특정 변수들의 특성들을 제한할 수 있습니다.
const를 사용하여 먼저 변수의 기능들을 제한하여 사용한다면 프로그래밍을 하면서 불필요한 에러의 발생 등을 좀 더 효율적으로 제어가 가능하게 됩니다.
C 언어 - struct(구조체) (0) | 2021.06.22 |
---|---|
C 언어 -포인터와 배열 (0) | 2021.06.21 |
C 언어 - 형변환(Casting) (0) | 2021.06.17 |
C 언어 - 오버플로우와 언더플로우 (0) | 2021.06.16 |
C 언어 - 다차원 배열 (0) | 2021.06.14 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet