|
sizeof()는 일반적으로 데이터형의 크기를 구하는 함수입니다. 하지만 배열의 경우에는 배열의 전체 크기를 돌려줍니다.
그리고 참고 하실 것은 포인터형의 크기는 해당 운영체제의 기본 주소번지의 크기를 가집니다.
원하시는 내용의 가장 간단한 답은,
int iNum = sizeof(subst) + sizeof(mainst) + sizeof (mainstruct->k);
입니다.
typedef struct SUBST
{
int m; // 4
int n; // 4
int l; // 4
} subst;
typedef struct MAINST
{
subst * substruct; //맨위스트럭쳐포함 // 4 (포인터이기때문)
int x,y,z; // 4*3 = 12
char * k; // 4 (이것도 포인터이기때문)
} mainst;
따라서 원하시는 답은,
4+4+4+4+12+4+sizeof ("test")의 크기입니다.
풀이 님이 쓰신 글 :
: typedef struct SUBST
: {
: int m;
: int n;
: int l;
:
: } subst;
:
: typedef struct MAINST
: {
: subst * substruct; //맨위스트럭쳐포함
: int x,y,z;
: char * k;
: } mainst;
:
: class TtestClass
: {
: public:
: TtestClass();
: ~TtestClass();
: void SizeOfStruct();
: mainst * mainstruct; //두번째 스트럭쳐포함
: };
:
: void TtestClass::SizeOfStruct() // 이 클래스의 크기
: {
: mainstruct = new mainst;
: mainstruct->k = new char
: mainstruct->substruct = new subst;
:
:
: mainstruct->x = 1;
: mainstruct->y = 2;
: mainstruct->z = 3;
: mainstruct->k = "test";
:
: mainstruct->substruct->m = 1;
: mainstruct->substruct->n = 2;
: mainstruct->substruct->l = 3;
:
: // 여기서 mainstruct의 크기를 알려면? 어케해야 되죠?
: int iNum = sizeof(*mainstruct) + sizeof(mainstruct->substruct);
: // 이렇게 해도 안 되던데......
:
: ShowMessage(IntToStr(iNum));
: }
:
: *** substruct와 캐릭터 포인터를 포함하고 있는 mainstruct의 size를 알수 있는 방법.. 없나요?
: 넘 어려워...
|