C++ 구조체에 멤버 변수를 사용하는것에 있어서 직접참조와 간접참조를 나눌수 있습니다.
직접참조를 하는 경우 [.] 을 사용하고 간접참조는 [->]를 사용합니다.
[ (*ptStruct).a = value) 식을 사용하지만 번거롭기에 ->를 사용합니다. (같은 뜻)]
왜 간접참조를 하는것일까? 궁금하지 않을 수 없었습니다.
괜히 있어보여서??? 그런것도 아닐텐데 말이지요..이에 대해서 몇가지 테스트를 통해서 알아보도록 하겠습니다.
일단 왜 굳이 포인터를 사용해서 간접참조를 하는것인가?
1. 구조체의 크기의 차이가 발생한다.
[결과]
구조체 NUM의 경우 멤버 변수의 갯수만큼 크기가 잡힙니다.
하지만 구조체 포인터의 경우는 4바이트 입니다.(당연한것...) 만약 많은 양의 데이터가 포함된 구조체라면
간접참조를 통해서 한개의 주소값만큼의 크기만을 사용하는것이 더 좋습니다.
구조체 포인터는 구조체가 아니고 포인터라는 사실!!
2. 다른 함수에서의 접근 (인자 값으로 넘기기)
[결과]
이것은 딱히 이유라고도 할 수가 없을것 같습니다.
어차피 다른 함수에서 해당 구조체의 멤버변수를 변경하려고 하면 간접참조를 할 수 밖에 없으니까요.
3. 기타 포인터 사용시 주의할 점
1. 포인터는 항상 초기화를 한 후에 사용해야 한다.
위와 같은 코드를 작성할 경우 얼핏 컴파일시 에러없이 잘 될 것 같지만...
사실 잘 되지 않습니다. 이유는 포인터를 초기화 시켜주기 않았기 떄문입니다...(int *pt 랑 동일합니다.)
[결과]
이 때문에 새로운 메모리 공간을 생성해서 해당 공간을 참조하게 하거나 다른 구조체를 &를 통해 참조로
초기화 시켜줘야 합니다.
'프로그래밍 > C++' 카테고리의 다른 글
[ C++]클래스 상속(4) - 순수 가상 함수 & 다중 상속 (0) | 2015.09.29 |
---|---|
[ C++]클래스 상속(3) - 가상 함수 (0) | 2015.09.29 |
[ C++]클래스 상속(2) - 상속 객체와 포인터(객체 포인터) (0) | 2015.09.25 |
[ C++]클래스 상속(1) - 상속을 위한 조건 (0) | 2015.09.24 |
C 언어 - define과 inline 함수 (0) | 2015.08.25 |