#17 구조체 및 구조체포인터
#구조체
구조체는 여러가지의 자료형들이 모인 집합을 하나의 자료형이라고 사용자지정하여 사용하는 것이다.
이는 main함수 밖에서 정의한다.
정의방법은
struct 사용자자료형명
{
자료형1 변수명1;
자료형2 변수명2;
.
.
.
};
으로 정의한다.
이 구조체의 사용자자료형명을 main함수에서 사용할 때, C++에서는 따로 struct임을 명시하지 않아도 된다.
초기화시에는
void main()
{
struct(C++에선 생략 가능) 사용자자료형명 변수명;
}
으로 사용하며, 이때 구조체의 변수는 배열의 형식을 가진다.
따라서 변수명에 대해 초기화 할 때, 배열처럼 중괄호를 써주며, 위에서 정의 한 순서대로 초기화가 된다.
초기화를 한 후, 각각 원소에 접근하기 위해서는 .(dot)을 사용하여 해당 원소에 접근할 수 있다.
아래는 예시이다
#include <iostream>
using namespace std;
struct tagSth // 구조체 선언
{
char chWord[10];
int iNumber;
};
void main()
{
tagSth Mine = { "Hello",5 }; // 구조체 초기화
cout << Mine.chWord << endl;
cout << Mine.iNumber << endl;
}
#typedef
typedef도 구조체와 마찬가지로 main함수 바깥에서 쓰인다.
typedef를 사용하면 자료형을 다른이름으로 바꿔서 사용할 수 있다.
정의방법은
typedef 자료형 원하는이름;
으로 할 수 있다.
typedef char ok 로 정의시에
초기화시에 char 대신 ok를 쓰면된다.
#include <iostream>
using namespace std;
typedef char ok;
void main()
{
ok Word = 'a';
cout << Word << endl;
}
#구조체포인터
구조체의 주소값을 저장하여 포인터를 사용 할 수 있다.
정의는
구조체자료형* 포인터변수명 = &구조체변수명;
으로 할 수 있다.
포인터에서 구조체의 원소에 접근 할때는 주소가 있기때문에 .(dot)의 사용이 안된다.
.(dot)의 사용을 위해서는
(*포인터변수명)으로 해야한다.
ex) (*ptr).iNumber;
또는 ->의 사용으로 접근할 수 있다.
포인터변수명->접근원소명;
#include <iostream>
using namespace std;
struct tagSth
{
char chWord[10];
int iNumber;
};
void main()
{
tagSth Mine = { "Hello",5 };
cout << Mine.chWord << endl;
cout << Mine.iNumber << endl;
tagSth* pTag = &Mine;
pTag->iNumber = 1;
cout << pTag->iNumber << endl;
}