인프런 커뮤니티 질문&답변

Barro님의 프로필 이미지
Barro

작성한 질문수

홍정모의 따라하며 배우는 C언어

14.2 구조체의 기본적인 사용법

구조체 포인터 선언의 기억공간 할당 여부

작성

·

271

0

구조체 설계 

struct guy {

char favfood[10],

char job[10]

}; 

일 때는 기억공간을 아직 할당받지 않은 상태이고

구조체 변수 선언 혹은 선언 동시 초기화 할 때 메모리에 공간을 할당받는다고 이해했습니다.

struct guy barney; 이 때 기억공간을 할당받는다 

 

포인터는 새로운 구조체를 생성하지 않고 기존의 동일 구조체를 가리킨다고 하셨는데, 구조체 포인터 변수는 구조체 포인터 변수 선언 시 메모리에 공간을 할당 받나요? 

struct person* someone; 

[정리]구조체 포인터 변수의 메모리 할당 시점이 궁금합니다.

 

답변 1

0

안녕하세요

포인터는 변수입니다. int 는 정수를 담는 변수이듯이 포인터는 주소라는 값을 담는 변수인 것이에요. 

따라서 struct person* someone; (=person 구조체 인스턴스들의 주소를 담을 수 있는 변수) 의 할당 시점에 대해서 물으시는 것은

int * ptr; 혹은 int a; 의 할당 시점을 물으시는 것과도 같습니다.

 구조체 메모리를 생성하는 것과는 상관이 없이, 기존의 구조체 메모리의 집 주소를 담는 것 뿐이구요,(그래서 구조체 인스턴스 메모리랑은 상관 없음. 그저 주소를 담는 것 뿐) 포인터의 할당 시점은 다른 변수들과 마찬가지로 선언 및 정의시 할당 됩니다. struct person* someone; 라고만 하셨다면 struct person 의 주소를 담을 수 있는 크기만큼의 메모리가 할당되며 초기화는 되지 않았으므로 쓰레기값이 들어있는 상태가 되겠네요.

(그리고 다음에 질문 주실 때 구체적인 강의 시간대를 함께 남겨주실 것을 부탁드립니다. "포인터는 새로운 구조체를 생성하지 않고 기존의 동일 구조체를 가리킨다고 하셨는데" 이 부분이 어디서 나오는지 모르겠어서요 ㅠ 감사합니다.)

 

Barro님의 프로필 이미지
Barro

작성한 질문수

질문하기