구조체란?
- 사용자가 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 |