학습목표
•
구조체 자료형을 이해하고 구현방법 알기
•
동적 메모리 할당
구조체(Structure)
타입이 다른 데이터들을 하나로 묶는 방법
배열 : 타입이 같은 데이터들을 하나로 묶는 방법
객체지향에서 Class를 공부할때, 구조체와 비교하는 경우가 많다(비슷한 성격 보유).
구조체 선언
1.
구조체형 선언 : 내부 구조 정의
2.
구조체 변수 선언 : 구조체형에 따른 변수 선언
3.
구조체 변수 사용 : 내부 항목에 데이터를 저장하고 사용
// 선언 형식
struct 구조체이름 {
int 항목1;
double 항목2;
char 항목3;
.
.
.
}
// 사용 형식
struct (구조체이름) (구조체의 변수이름)
C
복사
구조체 변수 선언 방법
// 1. 구조체형을 선언한 후, 구조체 변수 선언 : 가장 일반적 방법⭐️
struct employee {
char name[10];
int year;
int pay;
};
struct employee Lee;
// 2. 구조체형과 구조체 변수를 연결하여 선언
struct employee {
char name[10];
int year;
int pay;
} Lee;
// 3. 구조체형 이름을 생략하고 구조체 변수 이름만 선언
struct {
char name[10];
int year;
int pay;
} Lee;
C
복사
구조체와 포인터
구조체 포인터를 이용한 데이터 항목 지정 방법
// 구조체 포인터의 화살표 연산자 사용
Sptr -> name = "susan";
Sptr -> year = 2014;
Sptr -> pay = 4300;
// 구조체 포인터의 참조 연산자 사용 : 괄호를 넣지 않으면 오류 발생
(*Sptr).name = "susan";
(*Sptr).year = 2014;
(*Sptr).pay = 4300;
C
복사
구조체와 함수
구조체를 함수의 인수로 전달하는 경우
•
구조체의 복사본이 함수로 전달됨
•
만약 구조체의 크기가 크면 → 시간과 메모리 소요 시간 증가
구조체의 포인터를 함수의 인자로 전달하는 경우
•
시간과 공간을 절약
•
원본 훼손의 가능성이 존재
◦
그렇기에 보통 함수인자로 전달할때는, 구조체 내용을 변경하는 로직보다는, 구조체 내용물을 통해 비교하거나 그런 행위를 많이 이용
◦
const키워드를 사용
// const 키워드를 통해 포인터를 통한 구조체의 변경을 막음
int equal(struct student const *p1, struct student const *p2) {
if(strcmp(p1->name,p2->name) == 0) return 1;
else return 0;
}
C
복사
