happy coding

[c] 구조체의 기본 본문

self study/언어의 기본부터

[c] 구조체의 기본

yeoonii 2022. 11. 26. 20:23
TCP school 을 보고 정리한 내용입니다.

구조체(structure type)

구조체란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입을 말한다. 구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있으며, 이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 한다.

구조체의 정의와 선언

struct 구조체이름
{
	멤버변수1의타입 멤버변수1의이름;
    	멤버변수2의타입 멤버변수2의이름;
    ...
};

struct 구조체이름 구조체변수이름; //구조체 변수로 선언

struct 구조체이름
{
	멤버변수1타입 멤버변수1이름;
    	멤버변수2타입 멤버변수2이름;
    ...
} 구조체변수이름;	//구조체 정의와 변수의 선언 동시에

위 코드는 struct라는 키워드를 사용하여 구조체의 시작을 알리고, 구조체 이름으로 구조체를 정의한다. 중괄호 사이에 멤버 변수들을 선언하고, 마지막 세미콜론은 구조체 정의를 종료한다는 의미이다. 이렇게 정의된 구조체는 사용자 정의 자료형이라고 하고 정의된 구조체 타입은 구조체 변수로 선언하여 사용할 수 있다.

typedef 키워드

이 키워드는 이미 존재하는 타입에 새로운 이름을 붙일 때 사용한다. 구조체 변수를 선언하거나 사용할 때에는 매번 struct 키워드를 사용해 구조체임을 명시해야 하지만 typedef 키워드를 사용하여 구조체에 새로운 이름을 선언하며 매번 struct 키워드를 사용하지 않아도 된다.

typedef struct 구조체이름 구조체의새로운이름;	//typedef 키워드를 사용해 새로운 이름을 선언하는 방법

typedef struct(구조체이름)	//구조체의 정의와 typedef 선언 동시에
{
	멤버변수1타입 멤버변수1이름;
    	멤버변수2타입 멤버변수2이름;
    ...
} 구조체새로운이름;

여기서 구조체의 정의와 typedef 선언을 동시에 할 때에는 구조체의 이름을 생략할 수 있다.

구조체 멤버로의 접근 방법

배열에서는 인덱스를 이용해 배열 요소에 접근했다면 구조체에서 구조체 멤버로 접근하려고 할 때는 멤버 연산자(.)를 사용해야 한다.

구조체변수이름.멤버변수이름

여기서 구조체의 주소값과 구조체의 첫 번째 변수의 주소값은 언제나 같다.

구조체 변수의 초기화

구조체 변수를 초기화할 때는 멤버 연산자(.)와 중괄호({})를 사용한다.

구조체변수이름 = {.멤버변수1이름 = 초깃값, .멤버변수2이름 = 초깃값, ...};

위 방식을 사용하면 원하는 멤버 변수만을 초기화할 수 있다. 이때 멤버 변수가 정의된 순서와 초기화하는 순서는 아무런 상관이 없으며, 초기화하지 않은 멤버 변수는 0으로 초기화된다.

또한 배열의 초기화와 같은 방법으로 구조체 변수를 초기화할 수 있다.

구조체변수이름 = {멤버변수1초깃값, 멤버변수2초깃값, ...};

이때 구조체 정의에서 멤버 변수가 정의된 순서에 따라 차례대로 초깃값이 설정되며, 나머지 멤버 변수는 0으로 초기화된다. 

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 구조체의 활용  (0) 2022.11.27
[c] 포인터와 구조체  (0) 2022.11.26
[c] 문자와 문자열  (0) 2022.11.25
[c] 메모리 관리  (0) 2022.11.22
[c] 포인터와 배열  (0) 2022.11.22
Comments