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

C/C++ Q/A
[1601] Re:포인터 관련..^^;
나오미 [disatheaven] 1357 읽음    2002-11-22 02:31
char *ptr = "test";

위의 문장에서 "test"를 실제형상수라 합니다.
실제형상수는 문자상수,문자열상수,숫자상수 등등으로
나눌 수 있을것입니다.
또한 가장 빈번하게 사용되는 상수의 형태일것입니다.

또한 위와 같은 형태는 선언과 동시에 초기화를 한 문장입니다.
지역변수를 사용할 경우 에러 발생에 대비하게 위하여
습관적으로 선언과 동시에 초기화를 하도록 연습합니다.

포인터와 배열은 호환이 됩니다.
호환이 된다고 해서 같다는 의미는 아닙니다.
위 문장은
char ptr[] = "test"; // ---- (1)
와 같은 형태로 선언하여도 됩니다.
ptr에 들어가야 할 값은 어차피 "test"라는 문자열이 저장될
메모리의 선두번지이니까요.(설명하다 보니 또 같다가 되버리네..)

또한
char ptr[5] = "test"; // ---- (2)
와 같이 선언하여도 같은 의미입니다.

단 (1)의 경우 배열의 크기는 명시적으로
결정하지 않았지만 컴파일러가 컴파일시에 그 크기를
결정하여 할당해줍니다.

만일 (2)와 같은 형태의 초기화를 했다고 가정한다면
그 값을 변경할 수 없을까요?

변경할 수 있습니다. 만일 변경 할 수 없다면
프로그래밍에 어려움 만이 남을것입니다.

그렇다면 (1)과 같은 형태의 초기화 형태에서도
가능하다는 결론이 나옵니다.
컴파일시 컴파일러가 그 크기를 정해주기때문에....
곧 (1)과 같은 형태는 포인터로 변환이 될 수 있으므로
이것 역시 변환이 가능하다는 결론을 내릴 수 있게
됩니다.

님께서 질문하신 내용중 몇 구절을 살펴보면

"...*(ptr + 1)의 값을 변경할려고 ",
"그중에서 e라는 부분을 변경할려고 하면",
"당연히 배열로 잡을경우에는 아무문제가 없구여"

등의 문장을 발견할 수 있습니다.

'e'라는 값을 변경하기 위해 다음과 같은 과정이 있을 수 있습니다.

ptr[1] = 'x';
*(ptr+1) = 'x';

하지만 다음과 같은 문장은 에러가 발생합니다.
*(ptr+1) ="x"

왜 일까요?
감이 오셨으리라 생각합니다.
저의 추측으로 에러를 생각해 적어봤는데.. 제대로 추측한건지...
사우나 갔다와서 자기 전에 적어봤습니다... 자야징...

상수중에 바꿀수 없는 상수는 C++의 경우 const가 붙은
선언형 상수, 그리고 열거형 상수 입니다.
물론 이것 역시 컴파일러가 컴파일시에 그렇게 확인해 줄
뿐입니다.

+ -

관련 글 리스트
1595 포인터 관련..^^; 오전&오후 1355 2002/11/21
3725     Re:포인터 관련..^^; 김백일.cedar 1443 2002/11/21
1601     Re:포인터 관련..^^; 나오미 1357 2002/11/22
1604         Re:Re:포인터 관련..^^; 오전&오후 1388 2002/11/22
1610             Re:Re:Re:포인터 관련..^^; 나오미 1357 2002/11/23
1611                 Re:Re:Re:Re:포인터 관련..^^; 오전&오후 1237 2002/11/23
1627                     사과드립니다. 나오미 1376 2002/11/25
1615                     Re:Re:Re:Re:Re:포인터 관련..^^; 나오미 1346 2002/11/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.