OneDev

[C] 21. 구조체(struct) 본문

Language/C

[C] 21. 구조체(struct)

one_dev 2023. 7. 21. 16:34

▣ 목차

1. 구조체 정의

2. 멤버 접근하기

3. 구조체 포인터 & -> 연산자

4. 배열을 이용해 구조체 멤버 초기화 하기

 

◎ 1. 구조체 정의

구조체를 정의하는 방법은 아래와 같다

  • 기본형

닫는 괄호 뒤에 세미콜론( ; ) 을 붙여줘야 한다

 

  • 모든 멤버의 타입을 명시해주어야 한다
  • 마지막에 반드시 세미콜론(;) 을 붙인다
  • 구조체 내에서 변수를 초기화 할 수 없다
/* 구조체 예시 */
struct Person {
    int age; 
    int height;
    int weight;
    char name[20];
};


/* 구조체 내에서는 변수를 초기화 할 수 없다 */
struct Person {
    int age = 10;  <- 불가능 
    int height;
    int weight;
};

 

 

 

◎ 2. 멤버 접근하기

구조체에서 멤버에 접근할 때는 . 을 이용한다 ( [구조체이름].[멤버이름] )

struct Person {
    int age; 
    int height;
    int weight;
};

struct Kim; // 구조체 변수 Kim

/* . 을 이용해 구조체 멤버에 접근하기 */
Kim.age = 20 ; 
Kimg.height = 170;
Kimg.weight = 60;

 

 

 

◎ 3. 구조체 포인터 & -> 연산자

(1) 구조체 포인터

구조체를 가리키는 포인터 또한 생각해 볼 수 있다

struct test {
    int a, b;
};

struct test st; /* 구조체 변수 st */
struct test *ptr /* 구조체를 가리키는 포인터 변수 ptr */

ptr = &st;

/* 구조체 멤버의 값 변경 */
// 올바른 문장
(*ptr).a = 1;  // <-------- st.a = 1 과 동일한 문장
(*ptr).b = 2;  // <-------- st.b = 2 와 동일한 문장

//잘못된 문장
*ptr.a = 1;
*ptr.b = 2;

이 때 정의한 포인터 변수 ( struct test *ptr ) 는 구조체가 변수가 아닌 포인터 변수이다.

또한 구조체 포인터를 이용해 멤버에 접근하고자 할 때, 반드시 괄호를 쳐주어야 한다.

( . 연산자가 * 연산자보다 우선순위가 높기 때문)

 

(2) -> 연산자

구조체 포인터를 사용해 멤버에 접근할 떄, 보다 간단히 표현할 수 있게 해주는 연산자이다.

[포인터 -> 멤버] 의 형태로 사용하고, 이는 (*포인터).멤버 와 동일하다.

-> 연산자 또한 * 연산자보다 우선순위가 높다

/* 아래는 동일한 문장 */
(*ptr).a = 1;
ptr -> a = 1;

/* 아래는 동일한 문장 */
(*ptr).b = 2;
ptr -> b = 2;

 

◎ 4. 배열을 이용해 구조체 멤버 초기화 하기

배열을 이용해 구조체의 멤버를 쉽게 초기화 할 수 있다.

struct Human {
    int age;
    int height;
    int weight;
    int gender;
};

int main(){	
    struct Human Kim = {20, 180, 70, 0};
    
    // Kim.age = 20;
    // Kim.height = 180;
    // ....
    // .....
    
}

 

Comments