게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어에서 sizeof로 나오는 크기를 이해할 수 없네요.
게시물ID : programmer_11506짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 506회
댓글수 : 3개
등록시간 : 2015/06/22 19:37:16

아래의 코드에서 어째서 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();*/
}
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호