본문 바로가기

프로그래밍/C

[study] 구조체 & 구조체 포인터

 

구조체란?

- 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이다.

- 배열이 같은 타입의 변수 집합이라면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸다.

- 구조체를 구성하는 변수를 '멤버' 또는 '멤버 변수' 라고 한다.

 

구조체 정의 및 선언

struct doyoucode
{
	char	doy;
	int	coding;
};

 

struct 키워드 뒤에 구조체 이름을 작성하고, 내부에는 멤버변수의 타입, 이름을 작성한다.

마지막에 중괄호를 닫고 나서는 세미콜론을 꼭 넣어야 한다.

이렇게 정의하게 된 구조체를 '사용자 정의 자료형'이라고 한다.

 

정의 된 구조체 타입은 구조체 변수로 선언하여 사용할 수 있다.

ex) struct doyoucode my_code; (struct 구조체이름 구조체변수이름)

 

또한, 구조체의 정의 및 구조체 변수 선언을 동시에도 가능하다.

ex)

struct doyoucode
{
	char	doy;
	int	coding;
} my_code;

 

tyedef 키워드 활용

 

typedef 키워드로 매번 struct 키워드를 사용하여 명시하는 것을 줄이고 새로운 이름을 선언할 수 있다.

ex) typedef struct doyoucode hello; (struct 구조체이름 구조체새로운이름)

 

또한, 구조체의 정의와 typedef 선언을 동시에도 가능하다. (이 때 구조체 이름도 생략가능)

ex)

typedef struct doyoucode
{
	char	doy;
	int	coding;
} hello;

 

구조체 멤버 접근 방법

 

배열에서는 인덱스로 배열 요소에 접근한다면, 구조체는 멤버 연산자인 . 을 사용한다.

ex) hello.coding (구조체변수이름.멤버변수이름)

 

+) 구조체의 주소값과 구조체의 첫 번째 멤버 변수의 주소값은 언제나 같다.

 

구조체 변수 초기화

 

구조체 변수를 초기화 하려면 멤버 연산자 . 과 중괄호를 사용하면 된다.

ex) hello = {.doy = 'a', .coding = 10};

 

배열처럼 초기화할 수도 있다.

ex) my_book = {'a', 10};

 

구조체 포인터 선언 / 메모리 할당

 

일반 포인터 변수와 동일하게 * 참조 연산자를 생성 시 변수명 앞에 위치시키면 된다.

malloc으로 구조체 크기만큼 size를 지정해서 생성 및 할당이 가능하다.

struct doyoucode *new_stru = malloc(sizeof(struct doyoucode));

(struct 구조체명 * 포인터명 = malloc(sizeof(struct 구조체명));)

 

이러한 구조체 포인터가 가리키는 주소에 데이터를 추가하기 위해서는 화살표 연산을 사용하는데,

구조체 포인터 안의 변수 즉, 멤버 변수에 접근하도록 해주는 연산이다.

 

new_stru -> coding = 10;

(*new_stru).coding = 20;

포인터명 -> 멤버변수명 = 값 형태로 사용가능하며, (*포인터명).멤버변수 = 값 으로 대체해서 사용할 수도 있다.

 

'프로그래밍 > C' 카테고리의 다른 글

[study] Linked List (연결 리스트)  (0) 2024.03.14
[library] isalnum 구현하기  (0) 2024.03.13
[study] file descriptor 와 open()  (0) 2024.03.12
[study] 함수 포인터  (1) 2024.03.11
[library] isdigit 구현하기  (0) 2024.02.29
Recent Posts
Popular Posts
Recent Comments