관리 메뉴

hye-_

35강 | 구조체 본문

언어/C언어_기초

35강 | 구조체

hyehh 2024. 2. 23. 08:53
728x90
반응형
SMALL
728x90
반응형
SMALL

35강 | 구조체

자료 출처 - 깨알 C언어 | 35. 구조체 (youtube.com)


구조체란?

- 구조를 만드는 언어

- 여러 변수들을 모아서, 하나의 객체를 구성할 때 사용하는 사용자 정의 타입 객체 

 

사람이라는 것을 표현한다면

이름, 나이, 키 등등의 변수들을 각각 선언하면 사용하기 힘들다.

그래서 이 변수들을 묶어서 사람이라는 객체를 만들어버린다. 이렇게 표현된 것들을 보고 구조체라고 한다.

 

객체지향언어, 자바, c++에서는 이런 멤범변수와 메서드를 묶어서 하나의 객체를 만드는데,

c언어는 그렇게 못한다. 그래서 메서드를 빼버리고, 사람이 가지고 있는 어떤 구조 이름, 나이, 키 이런 것들을 묶어서 내가 정의한 변수가 되는 것이다. 사람이라는 사용자 정의 변수가 되는 게 구조체이다.

 

 

구조체란 별로 어려운게 아니다.

하나의 구조를 만들어놓고 뭐뭐점 뭐뭐점 이런 식으로 사용할 수 있는 게 구조체이다.


구조체 구성

 

struct

어떤 사용자 정의 타입의 구조를 만들겠다. 라는 의미

 

구조체를 구성하는 변수가 들어간다.

int가 들어간다던지, char가 들어간다던지, 쭉쭉 써놓는다.

그러면 이 구조체 하나에는 여러개의 변수가 담기는 형태가 된다.


구조체 정의 및 사용

기본 구조체 사용 

 

struct person

person이라는 사용자 정의 구조체를 만들겠다.

person안에는 name이라는 포인터 변수 char형이 있고, int형인 age 변수가 있다.

이렇게 정의를 한다. 

 

struct person user1;

사용할 때는 어떻게 사용하느냐?

구조체 변수를 하나 만들것인데, person이라는 구조체 이름은 user1로 할 것이다. 그러면 user1이라는 어떤 변수가 생겼다고 보면 된다. 하나의 변수가 생겼는데, 이 안에는 name과 age가 들어가 있는 상태인 것이다.

 

user1.name = "h user";

유저 1점 네임을 하게 되면 유저 1이 가리키게 되는 name이라는 공간 안에다가 h user를 집어넣게 된다.

 

%s, user1.name

문자열을 출력하는 것이다. user1.name 이 가지고 있는 name을 출력할 수 있게 된다. 이게 바로 기본적인 구조체의 사용이다.


생성을 같이해버리는 방법

 

person이라는 구조체를 만들 것인데,  나는 선언하고 그러는 거 귀찮아서 하기 싫다.

그러면 test; 집어넣는다. 그러면 test라는 인스턴스가 하나 생성이 되는 것이다. 

 

test.name =  , test.age= 

출력할 때에도, test.name, test.age 


포인터에 담는 방법

 

person이라는 구조체를 만들고, p를 포인터 변수로 만들었다. 

포인터 변수로 만들었을 때에는 -> 이렇게 사용한다.


 

구조체를 만들 것인데, 이름은 list이다. 이 구조체 안에는 포인터 변수 fp가 있다. 

fp에는 정수형 공간을 가리키고 있는 주소값을 담고 있다. 

 

data, *p

이것을 인스턴스 생성시키겠다.

 

p=&data

data 주소값이 100번지라고 할 때, p는 data의 주소값을 담는다. 그러니깐 *p의 구조체 자체가 없어진다. 그냥 p가 data를 가리키고만 있는다. 

 

p->fp=x+1;

p는 자신의 fp를 가리키고 있지 않다. data를 가리키고 있기 때문에 data의 fp라고 생각해야 된다.

지금 x의 주소값을 200번지라고 가정하에 x는 200을 가리키고 있고 +1을 하면 201번지가 된다. 201번지를 data의 fp에 넣어진다.

 

*(++p->fp)

++가 앞에 있다고 해서 ++를 먼저 해주는 게 아니다. 구조체에서는 p->fp가 하나의 변수를 가리키는 것이기 때문이다. 

p의 fp는 201이다. 201 ++를 해서 202가 된다. 202번지의 값을 출력해 주면 된다.


 

728x90
반응형
LIST

'언어 > C언어_기초' 카테고리의 다른 글

37강 | 함수  (0) 2024.02.26
36강 | 배열 포인터  (1) 2024.02.26
31강 ~ 34강| 포인터 배열  (0) 2024.02.19
29강 2차원 배열과 포인터  (0) 2023.10.18
28강 배열과 포인터(4)  (0) 2023.10.18