일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- AppInventer
- ASCCII
- 저조도
- 심도
- image sensor
- CS Mount
- 이미지센서
- C Mount
- 카메라
- 간단한 앱만들어보기
- 저장소와 동적메모리
- main 함수 인자 전달
- 조건 제어문
- Depth of Fileld
- 변수
- 아이리스
- 변수의 초기화와 대입
- Gain
- 고정비트레이트
- 렌즈
- Zoom Lense
- 무게선별자동화
- Pixel Bit Format
- 실생활알고리즘
- camera
- Digital Slow Shutter
- Patch Cleaner
- c언어
- 과초점거리
- 프로그래머스 lv2
- Today
- Total
카메라 개발자 공부방(SW)
[24장] const 본문
오늘 배워볼 const란 변수 메모리를 상수화 시키는 연산자입니다.
다음의 코드를 보시죠
#include <stdio.h>
int main()
{
const int n = 0;
n = 4;
}
// 실행결과
// compile error occur!
n이란 변수가 만들어졌지만, const에 의해서 상수화가 되었기 때문에 초기화 과정에서만 메모리에 데이터를 write 할 수 있습니다.
상수 메모리는 대입 연산이 되지 않습니다.
보통이 변수의 상수화는
1) 상수 목적으로 변수를 사용하는 경우나
2) 참조하는 메모리의 데이터를 read 만 한다면 그 때 사용됩니다.
(read 할 목적이라도 포인터 주소를 알고 있기 때문에 충분히 write 할 위험이 있습니다. 그것을 막는 것입니다.)
그리고 상수화 시키는 연산은 const도 있지만,
enum
define으로도 상수를 정의할 수 있습니다.
각각 무슨 차이가 있을 까요?
1) const는 상수화시키는 메모리 자체의 공간이 있습니다.
2) enum은 상수화 시키는 메모리 공간은 없고 값만 존재합니다.
3) define은 컴파일 시간에 값으로 치환됩니다.
#include <stdio.h>
void copy(int* dst, const int* src, int size)
{
for (int i = 0; i < size; i++) {
dst[i] = src[i];
}
}
int main()
{
const int MAX = 5;
int arr[MAX] = {1, 2, 3, 4, 5};
int arr2[MAX] = {0};
copy(arr2, arr, MAX);
for (int i = 0; i < size; i++) {
printf("%d ", arr2[i]);
}
}
// 실행결과
// 1 2 3 4 5
copy 함수에서 매개변수 src에서 의해 read 되는 메모리는 변경되지 않을 의도로 작성되었습니다.
하지만 프로그래머 실수?에의해 충분히 변경될 수 있는 가능성은 존재하기 때문에
const를 명시적으로 작성해서 이를 막는 것입니다. 이런 목적에서 const가 사용됩니다.
포인터 변수는 선언된 const의 위치에 따라 조금씩 기능이 달라집니다.
1) const int* pn = &n;
*pn은 참조하는 메모리 자체죠? *pn은 변경 불가하다는 뜻이고, pn은 변경 가능하다는 의미입니다.
2) int* const pn = &n;
*pn 변경 가능, pn 변경 불가
3) const int* const pn = &n;
*pn 변경 불가, pn 변경 불가
#include <stdio.h>
int main()
{
int n = 10;
int tmp = 100;
const int* const pn1 = &n;
const int* pn2 = &n;
int* const pn3 = &n;
*pn1 = 100; // compile error
pn1 = &tmp; // compile error
*pn2 = 100; // compile error
pn2 = &tmp; // ok
*pn3 = 100; // ok
pn3 = &tmp; // compile error
}
이해가 되시나요?
자 오늘은 여기까지!
'Langauge > C' 카테고리의 다른 글
[25장] main 함수의 인자전달 (0) | 2021.10.18 |
---|---|
[26장] 가변인자 (0) | 2021.10.17 |
[23장] 파일 입출력 (0) | 2021.10.12 |
[22장] 재귀함수 (0) | 2021.10.11 |
[21장] 함수 포인터 (0) | 2021.10.10 |