C언어 구조체(struct)란? 정의/선언/용도/초기화
이제까지 기본 자료형을 써왔습니다. int(4바이트)나 short(2바이트) 등등 말이죠. 그런데 3바이트짜리 자료형을 사용하고 싶으면 어떻게 해야할까요? 3바이트짜리 기본 자료형은 없습니다. 그래서 기본 자료형으로는 그 크기를 할당받을 수 없습니다. 바로 이 때 커스텀(Custom) 자료형을 활용합니다. 사용자 정의 자료형(User efined data type)이라고도 하여 우리가 새로운 자료형을 정의할 수 있다는 뜻입니다.
■ 구조체 정의
그 중 하나인 구조체에 대해 알아보겠습니다. 구조체를 선언할 때 사용하는 키워드 struct은 '건축물'을 뜻하는 영어 단어 structure을 의미합니다. 말 그대로 여러 부품을 조립하여 하나의 건축물을 이룬 것인데, C언어에서 구조체 역시 여러 자료형을 가진 변수들을 하나의 패키지로 만들어 놓은 것을 뜻합니다. 왜 데이터를 묶어서 사용하면 좋을까요? 잠시 프로그래밍을 떠나 현실 세계를 생각해봅시다.
지금 몇 시인가요? 3시 10분입니다.
오늘은 몇 일이죠? 7월 22일입니다.
둘의 공통점을 찾으셨나요? 위의 질문은 하나의 정보로만 전달할 수 없습니다. 몇 시인지 알려줄 때 '시'단위만 사용할 수 없죠. 때에 따라(거의 대부분) '분'도 함께 언급해야합니다. 몇 일인지 대답해줄 때도 마찬가지입니다. 이렇게 여러 정보를 하나로 묶을 때 의미가 부여되는 경우 구조체를 사용하면 편리합니다.
그럼 이해를 더욱 돕기 위해 프로그램상 마우스의 좌표 정보를 저장하고 관리해야 한다고 가정하겠습니다.
struct point // point라는 이름의 구조체 정의
{
int xpos; //point 구조체를 구성하는 멤버 xpos;
int ypos; //point 구조체를 구성하는 멤버 ypos;
};
point라는 구조체를 정의하였습니다. point라는 자료형을 만든 것이지요. 구조체의 멤버로는 기본 자료형을 넣을 수 있습니다. 끝에 세미콜론(;) 붙이는거 잊지 마세요.
이제 이 point 자료형으로 변수를 선언해보겠습니다.
■ 구조체 선언
구조체를 선언할 때는 struct이라는 키워드를 사용합니다.
struct point point1; //struct 자료형 변수명;
구조체를 정의함과 동시에 선언할 수 있습니다.
struct point
{
int xpos;
int ypos;
} point1, point2, point3;
그럼 이제 구조체 변수 point1 안에는 int형 변수 xpos와 ypos가 있습니다. 구조체 안에 있는 멤버에 어떻게 접근해야 할까요?
point1.xpos = 30; // 구조체 변수 이름.구조체 멤버의 이름
.연산자를 이용해서 접근하면 됩니다. 그럼 point 구조체 기반의 예제를 보겠습니다.
#include <stdio.h>
#include <math.h>
struct point
{
int xpos;
int ypos;
};
int main(void)
{
struct point point1, point2;
double distance;
fputs("point1 pos: ",stdout); // 표준 출력 스트림에 "point1 pos: "을 출력
scanf("&d %d", &point1.xpos, &point1.ypos); // 구조체 멤버를 대상으로도 &연산을 할 수 있음
fputs("point1 pos: ",stdout); // 표준 출력 스트림에 "point2 pos: "을 출력
scanf("&d %d", &point2.xpos, &point2.ypos);// 입력받은 값을 저장
distance=squrt((double)((point1.xpos-point2.xpos) * (point1.xpos-point2.xpos) +(point1.ypos-point2.ypos) * (point1.ypos-point2.ypos)));
printf("두 점의 거리는 %g 입니다. \n ", distance);
}
두 개의 구조체 변수를 선언하여 두 점 거리를 계산하는 코드입니다.
구조체의 멤버를 대상으로 & 연산을 할 수 있습니다.
■ 구조체 초기화
구조체의 초기화 방법은 배열의 초기화와 동일합니다. 멤버의 순서대로 값을 나열하면 됩니다.
struct point point1 = {10, 20};
이렇게 초기화 과정에는 문자열 저장을 위해 strcpy 함수를 호출할 필요가 없습니다.
-----------------------------------
-----------------------------------
'컴퓨터 공학 > C, C++' 카테고리의 다른 글
[ C ]커스텀 자료형 이해하기3_구조체 배열, 포인터 (374) | 2020.07.24 |
---|---|
[ C ]커스텀 자료형 이해하기2_typedef이란? typedef사용법 (403) | 2020.07.24 |
[ C ]메모리 이해하기12_메모리 정리 (413) | 2020.07.23 |
[ C ] 문자열 함수 이해하기8_C스타일 문자열 정리 (411) | 2020.07.23 |
[ C ] 문자열 함수 이해하기7_서식 지정 출력 / 서식 문자열 / 서식 지정자 모음 (384) | 2020.07.23 |
댓글