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
[71450] Re:구조체 선언방법에 대해 문의 사항이 있습니다.
빌더초보 [] 3103 읽음    2014-06-21 03:13
그냥 단순하게 나누자면,

1. 단일로 사용할때
선언 : AAA a;
사용 : a.b;

2.1 배열이고, 길이가 고정일때
선언 : AAA a[상수];
사용 : a[위치].b;

2.2 배열이고, 런타임시 길이가 가변일때
선언 : AAA *a;
사용 :
a = new AAA[길이];
a[위치].b;
delete[] a;
a=NULL;

3. 단일/배열에 상관없이 이미 선언된 변수의 값을 사용할 때;
3.1 이미 선언된 변수가 단일일때 (AAA c;)
선언 : AAA *a=NULL;
사용 :
a = &c;
a->b;
a=NULL;

3.2 이미 선언된 변수가 배열일때 (AAA *c; or AAA c[상수];)
선언 : AAA *a=NULL;
사용 :
a = c;
a[위치].b;
a=NULL;

3.3 이미 선언된 변수가 배열이고 특정 위치(1)의 값을 사용할 때,
선언 : AAA *a=NULL;
사용 :
a = &c[1];
a->b;   (c[1].b의 값)
a[1].b;   (c[2].b의값)
a=NULL;

3번 부터는 a->b 나 a[위치].b 에 어떤 값을 대입 할 경우엔 c의 값이 변하게 됩니다.
(참고로    a->b    는     a[0].b   와 같습니다.)

또한 포인터를 사용 시 NULL로 초기화 하고 사용 후 NULL로 채워 주는 행위는 대부분의 책에서 권장하는 사용 법입니다.
(포인터가 NULL 이라는건 아무것도 가르키지 않는다는 의미입니다.)
이렇게 하지 않을 시 어떤 오류가 어떻게 발생할지 알 수 없기 때문입니다.

다소 비약적인 예를 든다면... 어떤 함수 에서 int d=10; 라는 지역변수를 사용했는데,
지금 사용하는 함수에서 AAA *a 라고 선언 후, 실수로 아무 값도 대입하지 않으면,
a는 10 이라는 메모리 주소의 어떤 값을 가르키게 될 수도 있습니다.
이 때 10 라는 메모리 주소의 값이 수정이 불가능 한 경우(const 라던가, private 라던가..)라면
다행히 Access Violation Error가 발생하고, 디버깅을 할 수 있지만
수정이 가능한 경우라면, 어디의 값이 어떻게 변하는지 아무도 알수가 없습니다.
만약 10 이라는 위치가 어떤 Component 의 Caption일 경우, Caption이 비정상적인 값으로 변하게 되는거죠.


설명이 좀 길어졌는데...
배열, 포인터, 메모리 구조 등을 공부 하시면 의문이 풀리실겁니다.





구조체 님이 쓰신 글 :
:
: struct AAA
: {
:     int a;
:     int b;
: );
: 

:
: AAA구조체를 만들고
:
: 선언을
:
: 1. AAA aaa; <--이렇게도 하고
: 2. AAA *aaa; <--이렇게도 하고
: 3. AAA *aaa = new AAA <--이렇게도 하는데
:
: 어느걸 선언하던지
: aaa->a = 1;  (aaa.a = 1;)
: aaa->b = 2;  (aaa.b = 2;)
:
: 이런식으로 다 사용이 가능한데요
:
: 세번째 new해서 메모리 공간을 생성 하는건 delete하기 전까지 계속 쓰겠다는 의도인거는 알겠는데요
: 첫번째 선언과 두번째 선언은 그냥 개발자 맘대로 선언하는건가요??
:
: 서로 차이점을 알려주시면 감사하겠습니다.
:

+ -

관련 글 리스트
71448 구조체 선언방법에 대해 문의 사항이 있습니다. 구조체 3068 2014/06/20
71450     Re:구조체 선언방법에 대해 문의 사항이 있습니다. 빌더초보 3103 2014/06/21
71454         Re:Re:구조체 선언방법에 대해 문의 사항이 있습니다. pwrlove 3398 2014/06/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.