본문 바로가기

C언어

11-1강 - 구조체 기본

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