Search
moon
sun
📝

3월 14일(목)

학습목표

•
구조체 자료형을 이해하고 구현방법 알기
•
동적 메모리 할당

구조체(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
복사