Gallery view
Search
•
개념
사용자가 정의하는 데이터 형식
쉽게 생각하면 우리가 성인이 되면 받는 주민등록증 처럼 주민등록번호, 이름, 주소, 발급일자 등을 입력 저장하는 역할을 한다고 생각하면 된다.
•
구성
필드 또는 멤버인 변수로 구성
단, void 형은 사용할 수 없다.
•
구조체 형식
struct 태그{
멤버;
};
C
복사
▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽
struct POINT{
int x;
int y;
};
C
복사
◦
태그 tag : 구조체 식별자, 구조체 형식 이름 대문자 사용(관례)
•
구조체 라는 것은 우리가 정의하는 데이터 형이라고 생각하면 된다.
데이터 형을 사용하기 위해서는 구조체 변수를 선언을 해야한다.
•
구조체 선언1
◦
일반 변수 선언과 동일
struct POINT{
int x;
int y;
};
C
복사
struct POINT point;
struct POINT point[3], *ppoint;
데이터형
•
구조체 선언2
◦
구조체 정의와 변수 선언을 동시에 하는경우
struct POINT{
int x;
int y;
} point, *ppoint, PointArray[3];
point.x = 10;
point.y = 20; // 등...
C
복사
•
멤버 접근 연산자 : . , ->
◦
변수 선언인 경우 (' . ' dot 사용)
struct POINT point;
point.x = 20;
point.y = 10;
C
복사
◦
포인터 선언인 경우(' -> ' 사용)
struct POINT *ppoint, point;
ppoint - &point;
ppoint->x = 10;
ppoint->y = 20;
C
복사
•
다양한 구조체 변수 선언
struct POINT point;
struct POINT *ppoint;
struct POINT pointXY[3];
pintXY[0].x = 10;
pintXY[0].x = 20;
pintXY[1].x = 30; // 등
// 일반 변수와 동일하게 사용 및 선언
C
복사
구조체
•
역할
C 언어에서 정의된 기존 형식(int, char, ...) 이나 사용자 정의 형식(struct)을 보다 짧게 또는 의미있는 형식으로 재정의 한 것
•
형식
typedef // 기존 데이터형 새로운 데이터형;
typedef int INT;
typedef unsigned int UNIT;
typedef struct_POINT POINT;
C
복사
•
typedef 사용예(1) : 기존 데이터형
#include <stdio.h>
#include <stdlib.h>
typedef int INT;
typedef unsigned int UINT;
int main(void){
INT var1 = -7;
UINT var2 = 12;
printf("%d %d\n", var1, var2);
return 0;
}
C
복사
•
typedef 사용예(2) : 사용자 정의 데이터형(1)
#include <stdio.h>
#include <stdlib.h>
typedef struct _POINT{
int x;
int y;
} POINT;
int main(void){
POINT Test;
Test.x = 10;
Test.y = 20;
printf("%d %d\n", Test.x, Test.y);
return 0;
}
C
복사
구조체 사용 예
•
일반 변수로 사용하는 형태
#include <stdio.h>
#include <stdlib.h>
typedef struct _POINTP{
int x;
int y;
} POINT;
int main(void){
POINT point1;
point1.x = 10;
point1.y = 20;
printf("%d %d %ld\n", point1.x, point1.y, sizeof(point1));
return 0;
}
C
복사
•
포인터 변수로 사용하는 형태
// 포인터 변수로 사용하는 형태
#include <stdio.h>
#include <stdlib.h>
typedef struct _POINTP{
int x;
int y;
} POINT;
int main(void){
POINT point1, *ppoint;
point1.x = 10;
point1.y = 20;
ppoint = &point1;
printf("%d %d %ld\n", ppoint -> x, ppoint -> y, sizeof(ppoint));
ppoint = (POINT*)malloc(sizeof(POINT)*2);
ppoint[0].x = 10;
ppoint[0].y = 20;
ppoint[1].x = 100;
ppoint[1].y = 200;
printf("%d %d %d %d\n", ppoint[0].x, ppoint[0].y, ppoint[1].x, ppoint[1].y);
free(ppoint);
return 0;
}
C
복사
◦
포인터로 사용시에 배열로 사용사는게 더 가독성이 좋다고 생각하고 배열형태로 사용하는걸 권장한다.
•
함수의 매개변수로 사용하는 형태
// 함수의 매개변수로 사용하는 형태
#include <stdio.h>
#include <stdlib.h>
typedef struct _POINT{
int x;
int y;
} POINT;
void func1(POINT spoint){
printf("%d %d\n", spoint.x, spoint.y);
}
void func2(POINT *ppoint){
ppoint->x += 1;
ppoint->y += 1;
}
void func3(POINT pointarray[], int count){
int i;
for(i = 0; i < count; i++){
++pointarray[i].x;
++pointarray[i].y;
}
}
int main(void){
int i;
POINT spoint = {10, 20};
POINT spointarray[] = {{10, 20}, {30, 40}};
func1(spoint);
func2(&spoint);
printf("%d %d\n", spoint.x, spoint.y);
func3(spointarray, 2);
for(i = 0; i < 2; i++){
printf("%d %d ", spointarray[i].x, spointarray[i].y);
}
putchar('\n');
return 0;
}
C
복사
typedef
