안녕하세요 열코입니다.

이번시간에는 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 = { 10 };
}
cs


☞ 구조체 멤버에 접근하는 방법?

구조체 멤버는 점(도트; .) 연산자를 사용하여 접근 할 수 있습니다.


1
2
3
4
5
6
7
8
9
struct Point {
    int x;
    int y;
};
 
int main(void) {
    struct Point p1 = { 10 };
    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 = { 11 };
    struct Point* p2 = &p1;
 
    p2->= 2;
    p2->= 3;
}
cs


위와 같이 * 연산자를 사용하여 포인터 변수를 선언하고, 변수의 주소값을 대입하여 정의할 수 있습니다.

구조체 포인터의 대한 접근방법은 -> 연산자를 사용하여 접근 가능합니다.


구조체는 C와 C++에서 모두 사용 가능합니다.

C++이 세상에 나오기 전 C에서의 구조체를 활용하여 C++의 클래스(class)를 만들었다고 하네요.

이 처럼 C의 구조체와 C++의 클래스는 닮은점이 많이있답니다.

다음 시간에는 C++의 클래스에 대해 한번 배워보도록 하겠습니다.



이상 'C/C++ 구조체'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



'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

to Top