| 
 
히히...
 먼저 한가지 말씀드릴것은, 씨에 관계된 것은 아래 비주얼씨/터보씨에 
 올리셨으면 더 좋을뻔 했군요... (표현이 이상한가...?)
 전 이 포럼의 운영진과는 정말 아무! 관계도 없지만, 그래두 각 메뉴에 
 원래의 목적을 살리시는게 좋지 않을까 생각하는데...
 하긴 씨빌더도 씨로 코딩하니 영 엉뚱하게 한 건 아니지만... 히히.
 
 질문하신 내용은, 아직 포인터의 본질을 제대로 이해하시지 못한데서
 온것으로 보입니다.
 예를 들어 int *A_Pointer; 이렇게 선언한후, 
           int A_Int = 20; 이렇게 변수를 만들고,
           A_Pointer = &A
                       &A_Int; 이렇게 했을때,
 잘 생각해 보면 기본적으로 포인터변수라는 것이 이중적인 역할을 한다는걸
 알수 있을겁니다. 
 무슨 말인가 하면, A_Pointer라는 포인터 변수는, 그 자체가 어떤 int형
 값의 주소를 갖는 변수로의 의미가 있구요, 또 한편으로는 *A_Pointer라고
 할때처럼 가리키는 주소의 값의 의미로도 쓰일수 있습니다.
 포인터가 일반 다른 변수보다 좀 어렵다고 하는데는 이런 이중적 성질 덕분
 도 있겠지요...
 다시말해 A_Pointer는 내용값이 주소값이구, *A_Pointer는 정수값이지요...
 이런 포인터의 기본 성질을 잘 이해해야 헷갈리지 않겠지요...
 
 질문하신 예의 경우 const를 가지고 이런 성질을 잘 알려주는 예라고 하겠습니다.
 const int *p_snack이라고 할 경우, p_snack이라는 포인터를 사용해서 
 이 포인터가 가리키는 주소의 값을 수정할 수 없게 하는 것입니다.
 반대로 
 int * const p_snack 이라고 선언하면, 이 포인터가 가리키는 주소를 변경할 수 
 없도록 하는 결과가 됩니다.
 이해가 되시겠나요? 
 여기서 const의 위치가 앞뒤로 왔다리 갔다리 하는게 바로 const로 제한할 
 내용! 을 적절히 지시하기 위한 것입니다.
 그래서 const int *p_snack 이라고 선언했을 경우, p_snack은 가리키는 주소의
 내용을 수정못하도록 제한되어 있으니까 *p_snack이라는 표현은 에러를 
 일으키지요.
 반대로 int * const p_snack 이라고 선언한다면, 변경하지 못하도록 지시된것은
 가리키는 주소 그자체가 되기때문에 p_snack = &xxx 이런 표현은 에러를 
 발생시킵니다.
 
 제 머리가 좀 덜떨어진 편이라 제가 써놓고 봐도 좀 장황한데...
 아직 잘 이해가 안되신다면 다시한번 질문을 올려주세요. 그럼 더 자세히...
 아예 포인터의 뿌리를 통째로 뽑아드리죠... (히히...)
 
 
 부산에서 무식이 임펠리테리였습니다.
 
 
 
 
    |