일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Google reCaptcha
- C언어 변수
- 포인터
- C언어 함수
- 오라클
- 역순
- TCP/IP 소켓
- Oracle
- Vim
- 구글 reCaptcha
- Spring google
- C언어
- GUI
- 날짜
- C언어 메모리
- C언어 배열
- SQL
- gcc
- Spring email
- URL 다운로드
- 텍스트 파일 읽기
- Naver SmartEditor
- java
- C언어 파일입출력
- 자바
- placehoder
- C언어 매크로
- C언어 구조체
- HTML5
- jsp
- Today
- Total
easy software
C언어 포인터와 const(상수) 본문
안녕하세요. 이번 시간에는 포인터와 const 키워드에 대해 알아보고자 합니다.
앞서 공부한 내용보다는 무척 쉬운 것이지만 상당히 중요한 프로그래밍 습관을
길들일 수 있는 것이니, 주의깊게 살펴보시기 바랍니다.
const란 무엇일까요?
const키워드는 변수를 상수화 시켜주는 것을 의미합니다.
즉, 값을 변경하지 못하도록 막는역할을 하는 것이죠.
3,14라는 파이값은 불변의 수죠?
이런 파이값을 코드로 작성할 때 const키워드를 사용하는 것입니다.
만약, 프로그래머가 파이값을 상수로 정의하지 않고 코드를 작성하다가
실수로 중간에 파이값을 바꾸는 코드를 작성해버리면 어떻게 될까요?
컴파일할때는 전혀 문제가 되지 않았지만, 출력물은 엉망이 되어있을 수 있습니다.
짧은 코드를 가진 프로그램이면 그나마 괜찮은데, 5천라인의 코드를 작성하다가
저런 문제가 발생하면? 생각만해도 끔찍합니다.
그렇기 때문에 값을 변경하지 않을 것이라면, 반드시 const를 사용하는 습관을 길러두시기 바랍니다.
그럼 이제 포인터와 const키워드의 관계를 알아봅시다.
1. 포인터가 가리키는 변수의 상수화
1: int a = 10;
2: const int* p = &a;
3: *p = 30; //에러
4: a = 30;
3번째 라인에서 에러가 발생했습니다.
const의 위치를 보시면 int* 앞에 선언되어 있습니다.
const가 가장 앞에 선언되어 있을 경우
포인터를 통해서 변수의 값을 변경하는 것을 막겠다는 뜻입니다.
그러므로 p를 통해 a의 값을 변경하는 것은 불가능하지만
변수a자체는 상수가 아니기 때문에, 포인터를 사용하지 않고 변경할 때는 전혀 문제가 되지 않습니다.
2. 포인터 상수화
1: int a = 10;
2: int b = 20;
3: int* const p = &a;
4: p = &b; //에러
5: *p = 30;
이번의 const위치를 보시면 p의 바로 앞입니다.
이 위치에 const를 작성할 경우에는
p가 지니는 주소 값을 변경할 수 없다는 뜻이 됩니다.
그러므로 4번 라인에서 p에 다른 주소값을 대입하려 할 경우에 에러가 발생하는 것입니다.
하지만, 포인터가 가리키는 값은 상수화 되지 않았으므로 5번 라인처럼 언제든지 변경이 가능합니다.
3. 포인터와 포인터가 가리키는 값을 상수화 하려면?
1: int a = 10;
2: int b = 20;
3: const int* const p = &a;
4: p = &b; //에러
5: *p = 30; //에러
const키워드를 3번 라인처럼 작성해주면 됩니다.
3번 라인에서 포인터, 포인터가 가리키는 값 모두 상수화했기 때문에
4, 5번 라인에 모두 에러가 발생합니다.
'C언어 > 포인터와 배열' 카테고리의 다른 글
C언어 포인터와 배열이용 홀수/짝수 출력예제 (0) | 2015.01.23 |
---|---|
C언어 포인터와 const키워드 예제 (0) | 2015.01.19 |
C언어 Call-By-Reference 예제(변수자리 바꾸기) (0) | 2015.01.19 |
C언어 Call-By-Value / Reference 예제 (0) | 2015.01.19 |
C언어 Call-By-Value / Reference 이해 (0) | 2015.01.19 |