와드의 블로그

18. 구조체 본문

프로그래밍 언어/C

18. 구조체

Ward 2021. 9. 17. 23:50

(1) typedef 문법

 

* typedef  문법 사용하기

typedef 문법은 기존의 자료형 중에 자료형 이름의 길이가 긴 경우 프로그래머가 짧고 간결하게 자료형을 재정의하는 문법이다. #define과 기능이 비슷해 보이지만 #define은 치환 작업을 수행하는 전처리기이고 typedef는 기존 자료형을 다른 이름으로 새롭게 정의하는 기능이다.

typedef unsigned short int US // unsigned short int형을 US라는 새로운 이름으로 정의한다.

 

* typedef의 장점

typedef는 일반 변수 형식뿐만 아니라 배열, 포인터와 같은 형식도 재정의할 수 있다.

typedef는 소스 코드 전체의 자료형을 쉽게 바꿀 수 있다.

 

(2) 데이터를 그룹으로 묶는 구조체

 

* 데이터의 그룹화 1: 배열

배열을 이용하면 같은 형태의 데이터를 묶어서 관리할 수 있다. 하지만 배열은 같은 자료형의 데이터만 그룹으로 묶을 수 있다. 따라서 int 형의 데이터와 double 형의 데이터를 한 번에 관리할 수 없다.

 

* 데이터의 그룹화2: 구조체

구조체는 크기나 형식이 다른 데이터를 그룹으로 묶어 관리할 수 있다.

※ 구조체의 선언과 typedef의 사용

typedef struct People { // struct People 구조체 선언
	char name[12];  // typedef를 이용해  struct People -> Person
	int age;
	float height, weight;
}Person;

 

* 구조체로 선언한 변수의 요소 사용하기

typedef struct People { // struct People 구조체 선언
	char name[12];      // typedef를 이용해  struct People -> Person
	int age;
	float height, weight;
}Person;


int main()
{
	Person p;
	p.age = 11; // [구조체 변수 이름.요소 이름]을 통해 요소에 접근할 수 있다.
	p.height = 181.1;

	return 0;
}

 

* 구조체로 선언한 변수의 포인터로 사용하기

다음과 같이 Person형 변수의 주소를 *Person형 포인터 변수에 저장해서 사용할 수 있다.

Person data;
Person* p;
p = &data;
(*p).age = 23;

이때 * 연산자의 우선순위가 . 연산자보다 낮아서 괄호를 사용해야 한다.

※ 연산자 우선순위 문제를 해결하는 -> 연산자

이러한 연산자 우선순위 문제를 해결하기 위한 -> 연산자를 제공한다. -> 연산자는 * 연산자와 . 연산자를 사용하지 않고 하나의 연산자로 사용한다.

Person data;
Person* p;
p = &data;
p->age = 23;

※ 구조체 문법으로 선언한 변수의 초기화 방밥

구조체 변수는 배열과 마찬가지로 선언할 때 초기화하려면 중괄호를 사용한다.

 

 참조자료: C언어 입문

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

20. 함수 포인터  (0) 2021.09.18
19. 파일 입출력  (0) 2021.09.18
17. 다차원 포인터  (0) 2021.09.17
16. 메모리 할당  (0) 2021.09.17
15. 배열과 포인터  (0) 2021.09.17