C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[93] [답변] HUMINT21/[c++ 질문]/프포
박지훈.임프 [cbuilder] 6891 읽음    1998-01-28 23:38
히히...
먼저 한가지 말씀드릴것은, 씨에 관계된 것은 아래 비주얼씨/터보씨에
올리셨으면 더 좋을뻔 했군요... (표현이 이상한가...?)
전 이 포럼의 운영진과는 정말 아무! 관계도 없지만, 그래두 각 메뉴에
원래의 목적을 살리시는게 좋지 않을까 생각하는데...
하긴 씨빌더도 씨로 코딩하니 영 엉뚱하게 한 건 아니지만... 히히.

질문하신 내용은, 아직 포인터의 본질을 제대로 이해하시지 못한데서
온것으로 보입니다.
예를 들어 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 이런 표현은 에러를
발생시킵니다.

제 머리가 좀 덜떨어진 편이라 제가 써놓고 봐도 좀 장황한데...
아직 잘 이해가 안되신다면 다시한번 질문을 올려주세요. 그럼 더 자세히...
아예 포인터의 뿌리를 통째로 뽑아드리죠... (히히...)


부산에서 무식이 임펠리테리였습니다.



+ -

관련 글 리스트
92 [질문] [c++ 질문]/프포 humint21 7132 1998/01/28
96     [답변] HUMINT21/[c++ 질문]/프포 zspcw2 7063 1998/01/29
93     [답변] HUMINT21/[c++ 질문]/프포 박지훈.임프 6891 1998/01/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.