inflearn logo
강의

講義

知識共有

ホン・ジョンモのついていきながら学ぶC言語

14.2 構造体の基本的な使用法

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

327

Barro

投稿した質問数 6

0

구조체 설계 

struct guy {

char favfood[10],

char job[10]

}; 

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

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

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

 

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

struct person* someone; 

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

 

구조체포인터 c 구조체 포인터

回答 1

0

sohyun

안녕하세요

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

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

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

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

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

 

Export template 안됨

1

30

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

57

3

main 함수에서 왜 int만 선언이 되는걸까요

1

57

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

55

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

49

1

프로토타입과 함수간의 인자 불일치

1

73

2

12.12 헤더 관련 질문

1

60

2

Visual Studio Community 2026 사용 문의

1

138

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

61

2

getchar(), putchar()

1

94

3

강의자리ㅛ

1

80

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

114

2

소스파일안에 여러 파일

1

76

2

F5와 F7의 차이

1

79

2

c = TWO * (a+b); 에서 a와 b는?

1

60

2

; 세미콜론을 붙이는 기준에 문의

1

70

1

Step over 기능 문의

1

53

2

2.6 강의 따옴표 출력 규칙 문의

1

76

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

61

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

65

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

54

2