1. 구조체의 정의
예를 들어 하나의 구조체를 정의 해보겠다.
그룹을 지어줘야 하는 데이터 x좌표 정보와 y좌표 정보가 있다면, 이들 각각을 저장 하기 위한 변
수의 이름을 xPos, yPos라 해보자. 그리고 이들은 모두 double형으로 선언한다고 가정해 보자.
그렇다면 위의 두 변수를 묶어서 관리할 수 있어야 하는데, 이 때 필요한 것이 구조체이며 구조체
를 기반으로 두 변수를 묶으면 위와 같은 형태가 된다. xPos, yPos를 묶어서 하나의 자료형을 구
성한 것이다. 그리고 키워드 struct는 이것이 구조체의 정의가 되도록 한다. 만약에 struct가 아닌
다른 키워드가 온다면, 이는 구조체가 아닌 또 다른 형태의 정의가 된다. 그리고 point라는 이름
은 구조체의 이름이며, 변수의 선언에 사용되는 자료형의 이름으로 인식된다. point 구조체를 이
루는 구성원 정보는 중괄호 안에 선언되어 있다.
2. 구조체의 정의가 의미하는 것은?
point는 변수의 선언에 사용되는 자료형의 이름으로 인식이 된다. 즉 point라는 이름은 프로그래
머가 정의한 자료형이다.
위의 표에 기본 자료형 double과 구조체 자료형 point를 비교해 놓았다. 변수의 선언방식과 선언
된 변수의 접근방식에는 차이가 있지만, point도 double과 마찬가지로 변수의 선언에 사용이 되
는 자료형의 이름이다.
3. 구조체 활용의 예와 구조체 멤버의 접근
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdio.h> /*** point라는 이름의 자료형 정의 ***/ struct point { double xPos; double yPos; }; int main(void) { /** 변수의 선언 **/ double num; struct point pnt; /** 변수의 초기화 **/ num=1.2; pnt.xPos=2.2; pnt.yPos=3.4; /** 초기화된 값의 출력 **/ printf("num: %g \n", num); printf("pnt.xPos: %g \n", pnt.xPos); printf("pnt.yPos: %g \n\n", pnt.yPos); /** 변수의 크기 계산 **/ printf("num의 크기: %d바이트 \n", sizeof(num)); printf("pnt의 크기: %d바이트 \n", sizeof(pnt)); return 0; } | cs |
1 2 3 4 5 6 | num: 1.2 pnt.xPos: 2.2 pnt.yPos: 3.4 num의 크기: 8바이트 pnt의 크기: 16바이트 | cs |
• 13,14행 : 일반 변수와 구조체 변수의 선언방식을 보여준다. 선언방식에 있어서의 차이점은 구조
체 변수의 경우 구조체를 의미하는 키워드 struct를 붙여준다. 그리고 이렇게 선언이 되면 메모리
공간에는 다음과 같이 할당이 이뤄진다.
• 18~19행 : 변수 pnt는 두 개의 변수 xPos와 yPos로 이뤄져 있기 때문에 접근하는데 있어서 xPos
에 접근할 것인지 yPos에 접근할 것인지를 명시해야 한다. 18행과 19행은 각각 xPos와 yPos의 접
근 방법을 보여준다.
• 27, 28행 : 여기서의 출력결과는 13행과 14행의 메모리 구성을 대략의 형태로 증명한다. 변수 pnt
가 실제로 double형 변수 xPos와 yPos로 이뤄져 있다면, 28행의 출력결과는 16이 되어야 한다.
4. typedef를 이용한 구조체 변수의 선언
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> struct point { double xPos; double yPos; }; typedef struct point point; typedef struct point POINT; int main(void) { point p1; POINT p2; p1.xPos=0.1, p1.yPos=0.2; p2.xPos=2.4, p2.yPos=2.5; printf("X축 거리: %g \n", p2.xPos-p1.xPos); printf("Y축 거리: %g \n", p2.yPos-p1.yPos); return 0; } | cs |
1 2 | X축 거리: 2.3 Y축 거리: 2.3 | cs |
• 9,10행 : 두 가지 형태로 typedef 선언을 하고 있다. point와 POINT가 모두 struct point를 대신하도록 선언되었다.
• 14,15행 : 9,10행의 덕분으로 구조체 변수의 선언이 한결 간단해졌다. struct 키워드를 붙이지 않아도 된다.
• 20, 21행 : 구조체 변수의 멤버를 이용해서 뺄셈연산을 하고 있다. 이처럼 구조체 멤버에 접근하여 다양한 연산이 가능하다.
'BackEnd > C' 카테고리의 다른 글
구조체의 정의에 포함되는 typedef 선언 (0) | 2019.03.23 |
---|---|
구조체 변수로 가능한것과 불가능한 것 (0) | 2019.03.22 |
구조체의 필요성 (0) | 2019.03.21 |
대표적인 선행처리 명령문 (0) | 2019.03.21 |
전처리기(Preprocessor)와 매크로 (0) | 2019.03.21 |