아래의 코드에서 어째서 printf("sizeof(*items):%d\n",sizeof(*items));의 값이 8이 나오나요?
item은 배열 items[]의 시작주소니까 포인터라는 건 알겠는데요.
이 *item부분을 비주얼 스튜디오의 디버그의 조사식 창에 드래그해서 나오는 주소값을 메모리창을 띄워서 헥스값을 보니까 INSERT문자열이 아스키 코드값으로 저장되어 있더군요. 그래서 INSERT의 문자수를 줄이면 *item의 크기도 줄어들것 같아서 한번 소스코드의 {"INSERT", insert}부분을
{"IN", insert}으로 고치고 실행 해봐도 계속 printf("sizeof(*items):%d\n",sizeof(*items));에서 8이 나오더군요.
아무리 생각해도 애초에 구조체를 지정할때 char *title;에서 title가 가리키는 주소에서 무조건 8바이트를 할당하는 것 같은데
그 이유를 통 알수 없네요.
혹시 아시는 분 계시면 그 이유를 가르쳐 주셨으면 좋겠네요.
#include <stdio.h>
typedef struct memu
{
char *title;
void (*func)(void);
}MENUITEM;
void insert(void)
{
printf("insert\n");
}
void print(void)
{
printf("print()\n");
}
void search(void)
{
printf("search() 호출...\n");
}
void del(void)
{
printf("del() 호출...\n");
}
void end(void)
{
printf("end() 호출...\n");
}
void modify(void)
{
printf("modify() 호출...\n");
}
int main(void)
{
MENUITEM items[] = {
{"INSERT", insert},
{"PRINT", print},
//{"SEARCH", search},
{"MODIFY", modify},
{"DELETE", del},
{"END", end}
};
/*while(1)*/
{
printf("sizeof(*items):%d\n",sizeof(*items));
printf("sizeof(items):%d\n",sizeof(items));
/* puts("*** MENU ***");
for(int i = 0; i < sizeof(items) / sizeof(*items); i++)
printf("%d. %s\n", i+1, items[i].title);
printf("choice : ");
int no;
scanf("%d", &no);
fflush(stdin);
items[no-1].func();*/
}
}