C/C++ 구조체 사용법 및 예제
안녕하세요 열코입니다.
이번시간에는 C/C++에서 구조체의 사용법과 간단한 예제에 대해 알아보도록 하겠습니다.
☞ 구조체란?
구조체는 C/C++에서 사용자 정의 데이터 형식입니다.
구조체는 다른 유형의 항목들을 단일 유형으로 그룹화하는데 사용합니다.
쉽게말해 int, char, double과 같은 자료형을 사용자가 임의로 만드는 것입니다.
☞ 구조체 만드는 방법?
struct 키워드를 사용하여 구조체를 작성합니다.
아래는 구조체 작성 예제입니다.
1 2 3 4 5 | struct student { char name[20]; char address[100]; int age; }; | cs |
☞ 구조체 변수 선언 방법?
구조체를 선언했으니 구조체 변수를 만들어야합니다.
int a; 와 같이 int 자료형의 변수를 만드는 것과 같은 이치입니다.
1. 첫번째 방법
1 2 3 4 | struct Point { int x; int y; } p1; | cs |
2. 두번째 방법
1 2 3 4 5 6 7 8 | struct Point { int x; int y; }; int main(void) { struct Point p1; } | cs |
위와 같이 구조체 변수를 기본 자료형 처럼 별도로 선언할 수 있습니다.
* 두번째 방법에서 struct 키워드를 생략하고 싶을때
아래와 같이 typedef 키워드를 사용하여 구조체를 작성하면 구조체 변수 선언시 struct 키워드를 생략할 수 있습니다
1 2 3 4 5 6 7 8 | typedef struct Point { int x; int y; } Point; int main(void) { Point p1; } | cs |
(최신 컴파일러 버전에서는 typedef를 사용하지 않아도 struct 키워드를 생략할 수 있습니다.)
☞ 구조체 멤버를 초기화 하는 방법?
구조체 멤버는 구조체 변수를 선언할 때 초기화해야 합니다.
다음과 같이 구조체를 작성할 때 초기화 하면 오류를 발생합니다.
1 2 3 4 | struct Point { int x = 0; int y = 0; }; | cs |
그 이유는 간단합니다.
데이터 유형이 선언될 때 변수가 메모리에 할당되지 않기 때문입니다.
변수가 생성이 되어야만 메모리에 할당됩니다.
(최신 컴파일러 버전에서는 오류를 발생하지 않습니다.)
구조체 멤버는 { } (중괄호)를 사용하여 초기화 할 수 있습니다.
아래의 예제를 확인하세요.
1 2 3 4 5 6 7 8 | struct Point { int x; int y; }; int main(void) { struct Point p1 = { 1, 0 }; } | cs |
☞ 구조체 멤버에 접근하는 방법?
구조체 멤버는 점(도트; .) 연산자를 사용하여 접근 할 수 있습니다.
1 2 3 4 5 6 7 8 9 | struct Point { int x; int y; }; int main(void) { struct Point p1 = { 1, 0 }; p1.x = 10; } | cs |
☞ 구조체 배열 사용법?
일반 자료형(int, char, double 등)과 같이 구조체(사용자 임의 자료형) 역시 배열을 만들 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | struct Point { int x; int y; }; int main(void) { struct Point p[5]; for (int i = 0; i < 5; i++) { p[i].x = i; p[i].y = i; } } | cs |
☞ 구조체 포인터란?
지난 시간에 배열과 포인터의 비교에 대해 알아보았습니다. (공부하러가기)
배열과 포인터는 닮은점이 많다고했는데요.
일반 자료형(int, char, double 등)과 같이 구조체(사용자 임의 자료형) 역시 포인터를 만들 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | struct Point { int x; int y; }; int main(void) { struct Point p1 = { 1, 1 }; struct Point* p2 = &p1; p2->x = 2; p2->y = 3; } | cs |
위와 같이 * 연산자를 사용하여 포인터 변수를 선언하고, 변수의 주소값을 대입하여 정의할 수 있습니다.
구조체 포인터의 대한 접근방법은 -> 연산자를 사용하여 접근 가능합니다.
구조체는 C와 C++에서 모두 사용 가능합니다.
C++이 세상에 나오기 전 C에서의 구조체를 활용하여 C++의 클래스(class)를 만들었다고 하네요.
이 처럼 C의 구조체와 C++의 클래스는 닮은점이 많이있답니다.
다음 시간에는 C++의 클래스에 대해 한번 배워보도록 하겠습니다.
이상 'C/C++ 구조체'에 대해 알아보았습니다.
질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!
공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.
[관련 게시글]
2018/10/05 - [C, C++] - C/C++ 배열 사용법
2018/10/02 - [C, C++] - C 파일처리
2018/09/26 - [C, C++] - C++ 벡터 사용법
2018/09/25 - [C, C++] - C언어 포인터
2018/09/06 - [Java] - 자바 배열 사용법
'C, C++' 카테고리의 다른 글
C/C++ 메모리 동적할당 (0) | 2018.10.11 |
---|---|
C++ friend 클래스와 함수 (1) | 2018.10.10 |
C++ 클래스 접근제한자 (0) | 2018.10.10 |
C++ 클래스와 객체 (0) | 2018.10.09 |
C/C++ 배열 사용법 (0) | 2018.10.05 |
C 파일처리 (0) | 2018.10.02 |
C++ 벡터 사용법 (2) | 2018.09.26 |
C언어 포인터 (8) | 2018.09.25 |