array와 달리 다른 자료형의 변수를 체계적으로 관리하기 위해 구조체를 사용
1. 구조체 기본
1) 용어
1> 멤버 : 구조체 안에 들어있는 변수 (멤버 == 변수)
2) 구조체 정의
1> struct 키워드 사용
2> 예시
struct '구조체 이름'
{
'자료형' '멤버 이름'
};
3) 구조체 선언
1> 구조체 변수를 선언해야 한다.
2> 예시
struct '구조체 이름' '구조체 변수'
3> 구조체 정의 + 선언
=> 구조체 정의와 선언을 동시에 하려면 정의할 때 닫는 중괄호와 세미콜론 사이에 변수를 지정하면 된다.
4> 구조체 정의 + 선언 예시
struct '구조체 이름'
{
'자료형' '멤버 이름'
} '구조체 변수';
4) 멤버(변수)에 접근, 초기화
1> 멤버에 접근
'구조체 변수'.'멤버이름' ( .(점)을 사용한다 )
2> 멤버 초기화
멤버에 그냥 값을 할당하면 된다.
3> 구조체 선언 + 멤버 초기화
- <좌변>구조체를 선언 = <우변>중괄호 안에 . (점)과 멤버 이름을 적고 값을 할당
struct 구조체이름 변수이름 = { .멤버이름1 = 값1, .멤버이름2 = 값2 };
- 순서만 맞다면 멤버이름을 굳이 적지 않아도 된다.
struct 구조체이름 변수이름 = { 값1, 값2 };
5) 기타
1> 구조체를 닫는 중괄호 뒤에는 반드시 ;(세미콜론)을 붙여준다.
2> 전역에서 쓰이기 위해 보통 main 함수 바깥에 정의한다.
// 1. 구조체 정의
struct Person {
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
};
// 2. 구조체 변수 선언 - 1) 기본
struct Person p1;
// 2. 구조체 변수 선언 - 2) 정의 + 선언
struct Person {
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
} p1;
// 3. 멤버 접근, 초기화 - 1) 기본
strcpy(p1.name, "홍길동");
p1.age = 30;
// 3. 멤버 접근, 초기화 - 2) 선언 + 초기화
struct Person p1 = { .name = "홍길동", .age = 30 };
2. typedef
0) typedef
1> 원래 typedef는 자료형의 별칭을 만드는 것
2> 예시
typedef '자료형' '별칭' : 해당 자료형을 별칭으로 부른다.
typedef '자료형'* '별칭' : 해당 자료형을 가리키는(주소) pointer를 별칭으로 부른다.
typedef int MYINT; // int를 별칭 MYINT로 정의
typedef int* PMYINT; // int 포인터를 별칭 PMYINT로 정의
MYINT num1; // MYINT로 변수 선언
PMYINT numPtr1; // PMYINT로 포인터 변수 선언
numPtr1 = &num1; // 포인터에 변수의 주소 저장
// 사용 방법은 일반 변수, 포인터와 같음
1) 기본
1> 구조체 변수를 선언할 때 struct 키워드를 붙이지 않아도 된다.
2> '구조체 별칭' == struct '구조체 이름'
2) 구조체 정의
1> struct 키워드 사용
2> 예시
typedef struct '구조체 이름'
{
'자료형' '멤버 이름'
} '구조체 별칭';
2) 구조체 선언
1> 구조체 별칭 이용
'구조체 별칭' '구조체 변수'
2> 원래 방식
struct '구조체 이름' '구조체 변수'
3) 멤버(변수)에 접근, 초기화
1> 구조체 별칭 이용
'구조체 변수'.'멤버이름' ( .(점)을 사용한다 )
// 1. 구조체 정의
typedef struct _Person { // 구조체 이름은 _Person
char name[20]; // 구조체 멤버 1
int age; // 구조체 멤버 2
} Person;
// 2. 구조체 선언 - 1) 별칭 이용
Person p1;
// 2. 구조체 선언 - 2) 원래 방법 (별칭 이용하지 않음)
struct _Person p1;
// 3. 멤버(변수)에 접근, 초기화
strcpy(p1.name, "홍길동");
p1.age = 30;>
3. 익명 구조체
typedef으로 구조체 별칭을 정의할 때 구조체 이름을 지정하지 않는 방법
1) 구조체 정의
typedef struct
{
'자료형' '멤버 이름'
} '구조체 별칭';
2) 구조체 선언
3) 멤버(변수)에 접근, 초기화
(2)와 3)은 typedef 별칭 사용하는 방식과 동일하다.)
'C언어' 카테고리의 다른 글
11-2강 구조체 포인터 (0) | 2020.04.09 |
---|---|
9강 - Pointer Application (0) | 2020.03.31 |
3강 - 함수 (function) (0) | 2020.03.02 |
2강 - structure of a C program (0) | 2020.03.02 |
1강 - Introduction to C (0) | 2020.03.02 |