반응형
구조체(structure)는 연관 있는 데이터를 하나로 묶을 수 있는 자료형으로
데이터의 표현 및 관리가 용이해진다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
struct point {
int x, y;
};
int main(void) {
struct point pos;
scanf("%d %d", &pos.x, &pos.y);
printf("%d %d", pos.x, pos.y);
}
구조체 변수의 선언과 초기화
구조체를 정의함과 동시에 변수를 선언할 수 있으며,
선언과 동시에 구조체 멤버에 값을 할당할 수도 있다.
※ 초기화하지 않은 일부 멤버는 Default 값으로 초기화
#include <stdio.h>
struct point {
int x, y;
}pos, pos2;
int main(void) {
struct point pos3 = {10, 20};
}
구조체 배열
#include <stdio.h>
struct point {
int x, y;
};
int main(void) {
struct point pos[2] = { {1, 1}, {2, 2} };
for (int i = 0; i < 2; i++) {
printf("%d %d \n", pos[i].x, pos[i].y);
}
}
구조체 변수와 포인터
(*ptr).x = 10;형태보다 ptr->y = 20;를 주로 사용
#include <stdio.h>
struct point {
int x, y;
};
int main(void) {
struct point pos = {1, 2};
struct point *ptr = &pos;
(*ptr).x = 10;
ptr->y = 20;
printf("%d %d \n", pos.x, pos.y);
}
참고
- 구조체 변수의 주소 값은 구조체 변수의 첫번째 멤버의 주소 값과 동일
- TYPE형 구조체 변수의 멤버로 TYPE형 포인터 변수를 둘 수 있다.
struct point {
int x, y;
struct point* ptr;
};
선언과 동시에 초기화, 이 경우에는 구조체가 전역변수로도 사용 가능.
typedef 선언
struct point {
int x, y;
};
typedef struct point Point;
Point p = {10, 20};
구조체 이름을 생략해서도 가능한데 그러한 경우,
struct point p;를 이용한 변수 선언은 할 수 없습니다.
typedef struct point { // typedef로 재정의하기 때문에 구조체 이름("point") 생략 가능
int x, y;
} Point;
Point p = {10, 20};
구조체 내에서 연산은 대입, & 연산, sizeof 정도의 연산만 허용된다.
즉, 구조체 변수를 대상으로 사칙연산도 되지 않기에 함수 정의를 통해 직접 구현해야 한다.
#include <stdio.h>
typedef struct {
int x, y;
} Point;
Point addPoint(Point p1, Point p2) {
Point p = { p1.x + p2.x, p1.y + p2.y };
return p;
}
int main(void) {
Point A = { 1, 1 };
Point B = { 2, 3 };
Point result = addPoint(A, B);
printf("%d %d \n", result.x, result.y);
}
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] 지역변수와 전역변수 (0) | 2021.03.19 |
---|---|
[C] static 변수 (0) | 2021.03.19 |
[C] 조건문 (Switch문 예제) (0) | 2021.03.19 |
[C/C++] time(), clock()으로 실행시간 측정 (0) | 2021.03.19 |
[C] 중첩 for문 (한번에) 빠져나오기 (0) | 2021.03.19 |
댓글