개발 Study

#17 구조체 및 구조체포인터

HYuk 2021. 4. 14. 19:44
728x90

#구조체

구조체는 여러가지의 자료형들이 모인 집합을 하나의 자료형이라고 사용자지정하여 사용하는 것이다.

이는 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;

}

 

728x90