구조체
구조체(struct)
하나 이상의 변수를 묶어 그룹화한 사용자 정의 자료형이다.
코드를 작성하다보면 서로 연결된 관계에 있는 변수를 만들 때 가 있다.
예를 들어 학생증을 만드는 프로그램이 있다고하면
char studentName[10];
int number;
int grade;
int birthday;
.
.
.
이처럼 학생증에 담을 여러 정보를 학생마다 선언해주어야 하기 때문에 코드는 복잡해지고 작업량도 증가한다. 이럴 때 구조체를 사용하면 효율적인 데이터 관리가 가능해진다.
struct StudentCard
{
char name[10];
int number;
int grade;
int birthday;
};
StudentCard라는 새로운 자료형을 만들었다. 자료형에 담을 수 있는 데이터 유형은 중괄호 안의 변수들로 정해진다. 보통 구조체는 메인함수 외부에 전역으로 선언하여 어디서든 접근할 수 있도록 한다.
접근하는 방법
int main()
{
struct StudentCard studentA;
stucdentA = { "Bak", 123, 4, 0505};
strcpy(studentA.name, "Bak");
studentA.age = 16;
studentA.number = 13;
return 0;
}
1. 멤버변수
-
구조체를 선언할 때 내부에 선언한 변수를 멤버변수라고 한다. 멤버변수는 패딩이라는 것이 존재하기 때문에 자료형에 따라서 할당되는 메모리의 크기에 맞춰 순서를 정해주어야 낭비되는 메모리를 줄일 수 있다.
-
멤버변수를 선언할 때 값을 초기화 시킬 수 있으며 구조체 객체를 생성할 때 따로 값을 넣지 않으면 이 값이 기본값으로 들어간다.
struct StudentCard { char name[10]; int age = 16; int number = 1212; }
2. 구조체 객체 생성
- 전역으로 만든 구조체는 임의로 생성한 일종의 자료형으로 볼 수 있다.
-
구조체를 사용하기 위해서는 메인 함수 내에서 객체를 생성해야한다. 이를 인스턴스라고 부른다.
// 구조체 객체 선언 // 구조체 생성과 동시에 객체 생성 struct StudentCard { ~ } studentA, studentB; int main() { // 함수내에서 객체 생성 struct StudentCard studentA; // struct는 컴파일 버전에 따라 생략이 가능하다. StudentCard studentA; return 0; }
3. 멤버변수 접근
-
구조체의 멤버변수를 사용하는 방법
// 선언한 멤버변수 자료형에 맞춰 값을 넣어준다. studentA = { "Bak", 123, 4, 0505}; // .을 사용해서 각 멤버변수에 접근이 가능하다. studentA.age = 16; // 문자열의 경우 strcpy함수를 사용해야한다. strcpy(studentA.name, "Bak");
이 함수를 사용하기 위해서는
헤더를 추가해 주어야하며 컴파일 버전이 최신이라면 strcpy_s로 사용하여야한다.