easy software

C언어 포인터와 const키워드 예제 본문

C언어/포인터와 배열

C언어 포인터와 const키워드 예제

JAVA 웹개발자 2015. 1. 19. 23:16

예제를 하나 해보면서 포인터와 const의 또 한가지 특징을 말씀 드리겠습니다.

 

 

#include <stdio.h>

 

void print(const int* ptr){


 printf("%d \n", *ptr);
 int *p = ptr;
 *p = 20;


}

 

int main(void){

 

     int a = 10;
     int *p = &a;


     print(p);

 

     return 0;


}

 

 

위의 코드를 보면 문제점이 있어 보이나요? 아니면 없어 보이나요?

 

위의 코드에는 분명히 문제점이 있습니다.

 

print함수 내의 int *p = ptr; 이라는 코드가 바로 문제의 코드입니다.

 

왜 이 코드가 문제코드인지 설명해 드리겠습니다.

 

print함수는 인자를 ptr로 받고 있습니다.

 

ptr은 상수인데 print내에서 선언한 p는 상수가 아닙니다.

 

그런데 p에 ptr을 대입하고 있습니다.

 

히지만 C언어에서는

 

const키워드를 사용한 포인터는 const키워드를 사용한 포인터에만 대입해야 합니다.

 

위의 코드는 풀어서 설명하면,

 

ptr이 가리키는 대상의 값은 변경을 허용하지 않으려 했는데, int *p = ptr; 이라는 문장으로 인해

 

값 변경이 가능해져버린 겁니다.

 

이러한 이상한? 아니면 이해하기 어려운? 오류를 방지하기위해서 const키워드 포인터변수는

 

const키워드 포인터변수에만 대입할 수 있게 되어있습니다.

 

그러므로 위의 코드는 오류가 되는 것입니다.

Comments