C++ 문법(자료형) - 3. 구조체V

Ui Jin·2021년 9월 13일
0

C++ Grammar

목록 보기
4/13

구조체


--구조체란?--

여러가지 형태의 자료형을 그룹으로 만드는 것


--정의와 선언--

1) 정의

struct gujoche
{
	char name;
   	int number;
};				// 세미콜론 주의

struct키워드를 통해 구조체 정의의 시작을 알리고 gujoche라는 이름의 구조체를 정의합니다.

중괄호 안에 구조체에 넣고싶은 자료형로 변수를 선언합니다.

2) 선언

gujoche a;
gujoche b;

구조체의 이름을 자료형처럼 사용하여 변수를 선언합니다.

3) 원리

구조체를 이용해 변수를 *선언*할 때 구조체 안에 저장된 변수들로 메모리에 공간을 할당합니다.

위의 경우 a가 선언되면서 [ char | int ] 순서로 메모리의 공간이 확보됨(b도 마찬가지)


--사용방법--

1) 접근

a.name;
a.number;

구조체의 각 변수들을 멤버(멤버 변수)라고 부릅니다.

변수이름.멤버이름 의 방법을 통해 접근이 가능합니다.

2) 저장

a.name = 'Jin';
a.number = 1;
b.name = 'Ram';
b.number = 2;

각 멤버에 접근하여 자료형의 형태에 맞는 값들을 저장해줍니다.

3) 초기화

gujoche c = {'Young', 3};

중괄호 안에 각 멤버의 초기값을 자료형에 맞도록 순서대로 넣어줍니다.


--주의점--

1) 그냥 변수의 이름으로 cout에 넘기는 경우 오류가 발생합니다.

  • 이는 후에 배우는 연산자 오버로딩을 통해 해결이 가능합니다.

2) 초기화는 변수를 정의할 때에만 가능합니다.

gujoche a;
a = {'Jin', 1};		//이런 방식은 불가능 하다.

--활용--

1) 복사

배열과는 다르게 구조체끼리 대입하여 복사가 가능합니다.

a = b;

a의 멤버에 같은 이름을 가진 b의 멤버를 복사(대입)

같은 구조체일 경우에만 가능합니다.

2) 멤버

어떤 타입의 자료형이던지 구조체의 멤버가 될 수 있습니다.

배열, 구조체, 객체, 포인터 등등

3) 링크드 리스트(linked list)

포인터를 공부하고 보시길 추천드립니다.

구조체의 멤버에 포인터가 포함되어 있고 그 포인터가 다른 구조체를 가리키게 된다면 어떻게 될까요?

struct dog {
	char name[10];
    dog* dogptr;
};

dog A, B, C;

A.name = "chunil"
A.dogptr = &B

B.name = "chunee"
B.dogptr = &C

C.name = "chunsam"
C.dogptr = &A

A.name 은 자신의 name을 의미합니다.

(*A.dogptr).name 은 B의 name을 의미합니다.

(*(*A.dogptr).dogptr).name 은 C의 name을 의미합니다.

(*(*(*A.dogptr).dogptr).dogptr).name은 자신의 name을 의미합니다.

이런식으로 꼬리에 꼬리를 물고 있는것을 linkedlist라고 합니다.

기타사항

struct Point {
	float x;
    float y;
};

Point A = {0, 0}
Point B = {0, 0}

A.x
B.y

이런식으로 활용하면 프로그래밍에 있어 큰 이득을 볼 수 있습니다.


profile
github로 이전 중... (https://uijinee.github.io/)

0개의 댓글