포인터 책을 보다가,,,

12장 139page

구조체와 포인터를 보고 있는데요,, 갑자기 의문이 생겨서 글을 씁니다.
malloc 함수로 메모리를 동적할당 받았잖아요
pst = (struct student*)malloc(sizeof(struct student));
그러면 책에 나온데로 structstudent의 사이즈는 356 바이트가 될테고,,,

그렇다면 pst 에는 356byte 란 값이 저장 되는건가요???
p;

356 byte란 값이 저장된다로 이해하는게 맞을까요? 아니면은 356 byte가 할당된다가 맞을까요??
sizeof(pst) 하면은 값이 4가 나오잖아요 즉 4 byte 요.. 그렇다면은 이 4byte 의 크기에는(즉 pst 에는)
위에서 동적으로 할당받은 356 byte 크기의 메모리의 첫번째 주소번지가 저장되는 거라고 이해해되 될까요???
이것을 확인해 보기위해

(356 byte 크기의 메모리의 첫번째 주소부분에는 구조체 멤버중 name이 담겨있을것이라 생각해서,,,)

printf(%p\n,pst);
printf(%p\n,&pst-name);이렇게 해보니,,, 같은 값이 나오긴 했습니다..

아래는 위에 질문한것들의 앞부분 소스부분입니다.

제 질문이 잘 이해안가시더라도(표현력이 부족해서,,, ㅜㅜ) 제 생각이 맞는지 한번 살펴봐주세요~ 감사합니다
struct student {
char name[100];
long id;
char major[50];
char address[200];
};

void main()
{
struct student st;
struct student* pst;

pst = (struct student*)malloc(sizeof(struct student));

댓글 2

  • 맑은 2026.10.17

    멋진설명..ㅋㅋ

  • 새늘 2026.10.17

    포인터는 변수의 시작 주소를 가집니다. 구조체의 포인터도 마찬가지로, 해당 구조체변수에 대한 시작주소를 가지는거죠. 메모리를 모두 저장하는게 아니라, 시작주소를 가집니다.
    그리고, malloc() 함수는 동적으로 메모리를 할당한후, 그 시작주소를 리턴합니다. 따라서, pst에는 동적으로 할당받은 메모리 356 byte 내용이 저장된게 아니라, 어딘가 할당된 메모리(356byte = student구조체의 크기) 의 시작주소만 저장되고, 프로그래머는 이

프로그램 개발일반 다른 글

목록