Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 백준 21606번
- 위상 정렬(Topology Sort)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 1707번
- 위상 정렬(Topological Sort)
- 백준 10000번
- BFS(Breadth First Search)
- 스택(Stack)
- 백준 2812번
- 백준 9012번
- 백준 17608번
- DFS
- 동적 프로그래밍(Dynamic Programming)
- 백준 2504번
- 이분 탐색(Binary Search)
- 알고리즘 개념
- 큐(Queue)
- 백준 1948번
- 그리디 알고리즘(Greedy Algorithm)
- 이분 그래프(Bipartite Graph)
- DFS(Depth First Search)
- BFS
- 분할 정복(Divide and Conquer)
- 백준 18352번
- DFS & BFS
- 트리(Tree)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 백준 2493번
- 그래프(Graph)
- 백준 2261번
Archives
- Today
- Total
Always Be Wise
상수 포인터 본문
728x90
일반 변수에서 값을 절대 바꿀 수 없는 상수가 있듯이, 포인터에도 주소 값을 바꿀 수 없는 상수 포인터가 있다.
const가 맨 앞에 오는 경우
const int *ptr과 같이 const를 가장 앞에 사용하게 되면, 이 포인터를 이용해 변수의 값을 변경하는 것을 막는다.
아래 코드에서 const로 선언하지 않은 ptr1은 *ptr1을 이용해 값 20을 변경할 수 있다. 하지만 const로 선언된 ptr2는 값 대입시
오류가 발생한다. 그렇지만 변수 num 자체가 상수인 것은 아니다. num = 30처럼 값을 변경하는 것은 가능하다.
#include <stdio.h>
int main()
{
int num = 10;
int *ptr1 = #
const int *ptr2 = #
*ptr1 = 20;
num = 30;
*ptr2 = 40;
return 0;
}
자료형 다음에 const가 오는 경우
int *const ptr과 같이 자료형 다음에 const를 선언하게 되면, 포인터 변수 자체가 상수화 되어 주소 값을 변경할 수 없다.
이때, *은 const 전에 위치해야 한다. 만약 int const *ptr처럼 사용한다면 const int *ptr와 같은 효과가 나타난다.
아래 코드에서 int *const ptr2 = &num1이라고 선언하였다. 해당 포인터를 이용해서 값을 변경하는 것은 가능하지만 포인터가
가리키고 있는 주소를 변경하는 것은 불가능하다. 따라서 *ptr2 = 30은 가능하지만, ptr2 = &num2는 불가능ㅇ하다.
즉, "이 포인터가 오로지 num1 변수만을 가리키며, 절대 다른 변수를 가리키지 않겠다"는 의미이다.
#include <stdio.h>
int main()
{
int num1 = 10, num2 = 20;
int *ptr1 = &num1;
int* const ptr2 = &num1;
ptr1 = &num2;
*ptr2 = 30;
ptr2 = &num2;
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
구조체란? (0) | 2021.12.04 |
---|---|
이중 포인터와 포인터 배열 (0) | 2021.12.04 |
포인터 연산과 배열 (0) | 2021.12.04 |
Call by value & Call by reference (0) | 2021.12.04 |
포인터란? (0) | 2021.12.04 |
Comments