OneDev
[C] 21. 구조체(struct) 본문
▣ 목차
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;
// ....
// .....
}
'Language > C' 카테고리의 다른 글
[C] 23. 메모리 동적 할당(Dynamic Memory Allocation) - malloc, free (0) | 2023.07.31 |
---|---|
[C] 22. 전처리기 (preprocessor) (#include, #define, #error, #ifdef) (0) | 2023.07.26 |
[C] 20.문자열(String) (0) | 2023.07.18 |
[C] 19.함수(function) (0) | 2022.08.23 |
[C] puts : 문자열 출력 함수 (0) | 2022.08.02 |
Comments