윤성우의 열혈 C 프로그래밍 - const 선언에 대한 이해 [14-2]

Yumin Jung·2023년 7월 31일
0

14-2-1

void ShowAllData(const int * arr, int len)
{
	int i;
    for(i=0 ; i<len ; i++)
    	printf("%d", arr[i]);
}

위 함수의 매개변수 선언에서 매개변수 arr을 대상으로 const 선언을 한 이유가 무엇이겠는가?

arr 배열의 요소가 변경되지 않도록 보호한다. (정답)

14-2-2

void ShowData(const int * ptr)
{
	int * rptr = ptr;
    printf("%d \n", *rptr);
    *rptr = 20;
}

int main(void)
{
	int num = 10;
    int * ptr = &num;
    ShowData(ptr);
    return 0;
}

위 예제에서 한 가지 지적할만한 사항이 있다. 무엇인가?

ShowData 함수에서 *rptr=20;이 될 수 없다. 왜냐하면 매개변수의 const int * ptr 로 const 선언을 해주었기 때문에, ptr이 가리키는 num의 값이 바뀌면 오류가 발생한다. (얼추 정답)

[추가]
내가 작성한 위의 풀이 전, int * rptr = ptr; 이 문장에서 경고 메세지가 발생한다. ptr이 가리키는 변수에 저장된 값을 rptr도 가리키게 되는 문장이다.
[추가]
결과적으로 rptr을 이용해서 ptr이 가리키는 변수에 저장된 값을 변경할 수 있는 상황이 되어버렸고, ptr에 const선언을 추가한 것이 의미 없는 상황이 되어버렸다. 이렇듯 const 선언을 무의미하게 만드는 문장을 삽입하는 것은 잘못되었다. (답지)

profile
문과를 정말로 존중해

0개의 댓글