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
[60166] Re:Re:Re:스트럭쳐 할때요
Nibble [gameover] 1083 읽음    2010-02-05 17:55
포인터 선언과 배열 선언은 다릅니다.
포인터도 배열의 태그 표현을 사용할 수 있다는 것,
배열도 주소를 표현한다는 것만 같습니다.

구조체{
     타잎*a;
     타잎 b[];
}
이 둘의 차이는
a 의 경우 전역선언이아닌 이상, 쓰레기 값이 들어 있는 포인터입니다.
b 의 경우, 구조체내에서 b의 위치에 해당하는 주소값을 갖게 됩니다.
a[0] 이라고 하면 a 의 내용이 가리키는 쓰레기 주소값의 첫 데이타를 말하고,
b[0] 이라고 하면 b 가 위치한 주소의 첫 데이타를 말하게 되죠.

배열 선언은 상수 그 자체이고 메모리 공간을 따로 할당하지 않습니다.
포인터 선언은 그 자체가 word 크기의 (WORD 매크로와 다릅니다) 변수일 뿐입니다.

그 내용을 참조하느냐, 그 주소 자체냐의 차이라고 다시 한번 말씀 드립니다.
말씀하신 경우는 배열로 선언해서 다음 주소들을 가리키게 함이 맞구요
굳이 포인터로 선언하셨다면 *S = &S + sizeof(S); 처럼 해 놓고 S[0] 처럼 쓰셔야 하고
4바이트 낭비가 생깁니다.

한수동 님이 쓰신 글 :
: 별도로 하라는 말씀은 sizeof(P_t) - sizeof(S_t *) + (sizeof(S_t) * Count); 에서
: -sizeof(S_t *) 부분을 빼라는 말씀이신가요? 흠.. 해봤는데요 안되네요;;
:
:
: 강신영.Divinespear 님이 쓰신 글 :
: : Proto->S 는 그냥 포인터로 선언되어 있기 때문에, 메모리를 별도로 할당하셔야 합니다.
: :
: : 한수동 님이 쓰신 글 :
: : : typedef struct    {
: : :         unsigned char     T;
: : :         unsigned char     S;
: : :         unsigned short     M;
: : : }S_t;
: : :
: : : typedef    struct  {
: : :         unsigned short    H;
: : :         unsigned char    M;
: : :         S_t          *S;
: : : } P_t;
: : :
: : : int         Count       = 사용자가 원하는 만큼의 수;
: : : int         TotalSize  = sizeof(P_t) - sizeof(S_t *) + (sizeof(S_t) * Count);
: : : P_t       *Proto       = (P_t *) new unsigned char[TotalSize];
: : :
: : : 제가 S_t 라는 스트럭쳐를 하나 만들고요
: : : 그리고 P_t 라는 스트럭쳐에
: : : S_t 스트럭쳐 하나를 포인터로 선언 했습니다
: : :
: : : 그리고 나서 new 를 이용해서 제가 원하는 사이즈만큼 메모리 공간을 잡았습니다
: : : (Count는 제가 원하는 S_t의 수입니다)(이렇게 한 이유는 S_t가 몇개가 필요한지 모르기 때문입니다)
: : :
: : : 그리고 나서 Proto->S[0].T  이런식으로 불러내면 자동완성 기능에는 문제 없이 뜨고 컴파일도 잘 되는데
: : :
: : : 이상하게 프로그램상에서 Proto->S[0].T  구문을 부르려고 하면 자꾸 Memory Violation 이 뜹니다 왜 그런거죠?
: : :
: : : 그래서 스트럭쳐에 있는 S를 포인터로 잡지 않고 S[] 이런 배열 식으로 잡으니까 되네요;; 포인터로 잡으나 배열로 잡으나 같은 포인터인데 왜 그런지 모르겠네요 ㅡㅡ;;
: : : (혹시나 해서 #pragma pack 으로 묶어 보기도 했습니다)

+ -

관련 글 리스트
60155 스트럭쳐 할때요 한수동 990 2010/02/05
60167     Re:스트럭쳐 할때요 ÀX 1022 2010/02/05
60156     Re:스트럭쳐 할때요 강신영.Divinespear 912 2010/02/05
60159         Re:Re:스트럭쳐 할때요 한수동 999 2010/02/05
60166             Re:Re:Re:스트럭쳐 할때요 Nibble 1083 2010/02/05
60170                 Re:Re:Re:Re:스트럭쳐 할때요 한수동 1019 2010/02/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.