4차이가 나는것이 맞습니다.
왜냐하면 win32에서는 기본적으로 메모리를 잡을때 32bit씩(4Byte)씩 잡으니까요
typedef struct
{
BYTE A;
BYTE B;
BYTE C;
}ABC;
ABC KK[2];
위경우 &KK[0].A 와 &KK[1].A 의 하면 차이가 3이 아니라 4가 납니다.
이것도 같은경우죠
그럼 어떡케 하면되나?
#pragma를 이용하시면 됩니다.
아래와 같이 하시면 #pragma pack 사이에 선언된 구조체는
그냥 다 붙어서 메모리에 잡힙니다.
#pragma pack(push,1)
typedef struct
{
BYTE A;
BYTE B;
BYTE C;
}ABC;
#pragma pack(pop)
#pragma 지시어의 사용법에 대해서는
팁&트릭 게시판에 임프님께서 올려놓으신
#pragma 지시어의 사용법 정리를 참조하십시요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=106
그럼
리이 님이 쓰신 글 :
: 제가 지금 C++ 공부 중인데요. 얼마전 좋은 component 를 구해서(수학 Graph 관련) 간단한 그래프 작업중인데요
:
: 현재 C로 되어 있는 Source 를 이용하려고 합니다
:
: typedef struct {
: short a;
: L_S b[22];
: } TOTAL_S;
:
: typedef struct {
: L0_U L0;
: L1_U L1;
: L2_U L2;
: L3_U L3;
: } L_S;
:
: typedef union {
: L0_ B BITWISE;
: L0_W WORDWISE;
: } L0_U;
: /* L1_U L2_U L3_U 는 L0와 똑같습니다 */
: typedef struct {
: unsigned int d :16;
: } L0_B;
:
: typedef struct {
: unsigned short f;
: } L0_W;
:
: 이런 struct 구문이 C 파일에서 선언이 되어 있는데 C 쪽에서 찍어보면 &b.L0 와 &b.L1 의 address 가 4차이납니다
: 2차이가 나야 되지 않나요?
: 이러한 struct 형태의 point 형태의index 를 포함하는 C 함수를 C++ 에서 호출하는데 2씩 증가하지 않아 넘 힘듭니다
:
: C 파일을 C++ 파일로 바꾸면 가볍게 해결되겠지만 C로 된 파일을 변경하면 지금 만드는 간단한 program의 의미가
: 없어 져서요
:
: 고수님의 의견 기다립니다
:
: 감사합니다
|