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
[10831] Re:Re:포인터와 배열에 이해가 부족해서요.
김백일 [cedar] 916 읽음    2001-09-08 03:44
최보현.U&I 님이 쓰신 글 :
: 모라 님이 쓰신 글 :
: :  Memo1->SelectAll();
: :   Memo1->SetSelTextBuf("");
: :   Memo1->Text="ar";
: :   Memo2->Text=Memo1->Text[0];
: :
: : Test가 포인터로 알고 [0]으로 지정해서 2번째 memo창에

Test가 아니라 Text이겠지요.
여기서 Text는 C에서의 배열 이름, 즉 배열의 주소 값(위의 포인터란 표현도
잘못이 있네요. 포인터라하면 주소 값을 저장하는 변수를 뜻하니까요.)이 아닙니다!
바로 AnsiString 객체이지요.
AnsiString 객체는 문자의 배열이 아닙니다. 절대 혼동하지 마세요.
Text[1] 이라고 쓴 것은 사실 Text.operator[](1)이라는 멤버 함수를
호출한 겁니다.

: : a만 보이게 할려고 했더니 에러가 나더군요.
: :
: : 1을 넣으니까 원한는 a가 나오구요.
: :
: : 왜 그런가요?
:
: 유엔아이 입니다.
:
: AnsiString 의 기본 시작 인덱스는 1 이 맞습니다 ..
:
: 당연히 1을 넣으면 a 가 나오는겁니다 ..
:
: 0 넣으면 에러가 나구요~
:
: 실수를 많이 하는 부분이지요~
:
: 왜이렇게 만들었는지 저두 궁금 할 따름 입니다.

그 이유는... 모든 VCL 클래스는 오브젝트 파스칼 코드로 되어 있기 때문이죠.
파스칼 문자열의 기본 시작 인덱스는 항상 1부터입니다.
델파이와 호환을 위해서는 어쩔 수 없죠.
반면 TStrings나 TStringList의 인덱스는 0부터 시작합니다.
정말 헷갈리지요. -_-;;

그런데 VCL 클래스 중에 유일하게(제 기억엔 아마도...) C++ 코드로 된 부분이
AnsiString에 있습니다.
바로 c_str() 메소드지요.
이것은 C 스타일의 문자열인 char* 타입의 문자열을 리턴하는 함수입니다.
VCL이 아닌 표준 C/C++ 라이브러리나 Windows API를 사용할 때는 반드시
사용되어야 합니다.

: 암튼 도움 말에도 그리 나와 있습니다..
:
: 그럼

+ -

관련 글 리스트
10828 포인터와 배열에 이해가 부족해서요. 모라 1046 2001/09/08
10829     Re:포인터와 배열에 이해가 부족해서요. 최보현.U&I 993 2001/09/08
10831         Re:Re:포인터와 배열에 이해가 부족해서요. 김백일 916 2001/09/08
10832             Re:Re:Re:포인터와 배열에 이해가 부족해서요. 최보현.U&I 1060 2001/09/08
10849                 Re:Re:Re:Re:포인터와 배열에 이해가 부족해서요. 김백일 983 2001/09/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.