구조체는 하나 이상의 변수를 묶어 새로운 자료형을 만들 때 사용됩니다. '새로운 자료형'을 만든다는 게 어떤 의미가 있는 지 알아보도록 하겠습니다.
구조체의 정의
구조체는 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구입니다. 구조체 기반으로 새로운 자료형이 정의되며, 동일한 성격의 자료를 저장하고 관리하는 데 유용하게 쓰입니다. 예를 들어 특정 명단을 작성하고, 각 정보에 사람의 이름과 나이가 반복적으로 들어 가 있다고 보면 아래와 같이 새로운 자료형을 정의할 수 있습니다.
struct person {
char name[20];
int age;
};
위 자료형 정의를 설명하면 아래와 같습니다.
- struct선언 시 struct를 앞에 붙입니다.
- person은 person이라는 이름의 구조체를 정의한 것입니다.
- char name[20]과 int age는 각각 구조체 변수의 '멤버'가 됩니다.
- struct person p1; 등으로 p1이라는 구조체 변수를 선언할 수 있습니다.
변수 선언과 함께 사용하면 아래와 같습니다.
#include <stdio.h>
#include <string.h>
struct person {
char name[20];
int age;
};
int main()
{
struct person p1;
struct person p2;
strcpy(p1.name,"A") ;
p1.age = 30;
strcpy(p2.name,"B") ;
p2.age = 20;
printf("%s %d\n", p1.name,p1.age);
printf("%s %d\n", p2.name,p2.age);
return 0;
}
p1.name, p1.age, p2.name, p2.age 등으로 간편하고 통일성 있게 자료를 저장할 수 있습니다.
<구조체 변수의 이름.구조체 멤버의 이름>으로 쓰입니다.
구조체가 없었다면, 모든 변수를 일일이 선언하여야 했을 것입니다. 아래와 같이 말입니다.
#include <stdio.h>
#include <string.h>
int main()
{
char p1_name[20];
char p2_name[20];
int p1_age;
int p2_age;
strcpy(p1_name,"A");
p1_age = 30;
strcpy(p2_name,"B");
p2_age = 20;
printf("%s %d\n", p1_name,p1_age);
printf("%s %d\n", p2_name,p2_age);
return 0;
}
변수가 많아질수록 일일이 변수 선언도 해야하고, 통일성도 떨어질 수 있습니다. 관리 측면에서 구조체가 훨씬 유리합니다.
구조체 변수는 아래와 같이 정의하고 선언을 동시에 할 수 있습니다.
struct point {
int x;
int y;
} pos1, pos2;
pos1과 pos2라는 구조체 변수가 선언되었습니다. 자주 쓰이는 방식은 아닙니다.
구조체 변수의 초기화
구조체 변수도 선언과 동시에 초기화를 할 수 있습니다.
#include <stdio.h>
#include <string.h>
struct point {
int xpos;
int ypos;
};
int main()
{
struct point pos1 = {1,2};
printf("%d\n", pos1.xpos);
printf("%d\n", pos1.ypos);
return 0;
}
출력:
1
2
struct point pos1 = {1,2};을 통해 point형의 pos1이라는 구조체 변수를 정의하고, pos1.xpos와 pos1.ypos의 구조체 멤버의 값도 1,2로 동시에 초기화하였습니다.
해당 내용은 윤성우 열혈 C프로그래밍을 참조하였습니다.
'C C++ > C언어 기초' 카테고리의 다른 글
[C++] C++ 스타일 입출력 (입력, 출력, 문자열 입력) (0) | 2022.07.06 |
---|---|
C언어 - 구조체 배열과 포인터 (0) | 2022.05.05 |
C언어 - 함수 포인터 및 void 포인터 (0) | 2022.05.04 |
C언어 - 포인터와 함수 관계의 모든 것 (0) | 2022.05.03 |
C언어 - 포인터 배열의 이해 : 포인터 변수로 이뤄진 배열 (0) | 2022.05.02 |
댓글