본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 13일 차 : typedef , 구조체

안녕하세요 넬다이입니다.

 

13일 차는 구조체에 대해서 정리할 텐데요 

 

C와 C++의 꽃 포인터를 넘어오신 여러분들이라면은 구조체는 쉽게 넘어갈 것이라고 생각합니다~.

 


구조체

우리가 프로그램을 설계할 때 적절한 데이터 관리 방식을 선택하는 것은 매우 중요한 절차입니다.
변수, 혹은 배열, 
성적표를 3명을 입력받을 때 각각의 자료마다 3개짜리 배열을 선언해서 사용했어야 했다.
구조체는 이러한 상황일 때 좀 더 융통성 있게 사용할 수 있게 해 준다.

구조체 논리적 자료 표현, 사용자 정의 자료형

우리는 이미 기본 자료형에 대해서 배운 적이 있습니다.
우리가 int iA를 선언하듯
구조체 변수명 <<---- 이런 식으로 사용할 수 있도록 하는 것이며 구조체는 가변적인 크기를 갖는다..

구조체는 C에서도 존재하는 문법이었고 다양한 타입들을 묶어놓은 집합이다.

 

#include <iostream>

using namespace std;

struct tagInfo
{
	char	szName[20];
	int		iKor;
	int		iMath;
	int		iEng;
};


void main()
{
	tagInfo tInfo;

	cout << "이름 : ";
	cin >> tInfo.szName;
	cout << "국어 : ";
	cin >> tInfo.iKor;
	cout << "수학 : ";
	cin >> tInfo.iMath;
	cout << "영어 : ";
	cin >> tInfo.iEng;

	tagInfo tInfoArray[3];

	for(int i = 0; i < 3; ++i)
	{
		cout << "이름 : ";
		cin >> tInfoArray[i].szName;
		cout << "국어 : ";
		cin >> tInfoArray[i].iKor;
		cout << "수학 : ";
		cin >> tInfoArray[i].iMath;
		cout << "영어 : ";
		cin >> tInfoArray[i].iEng;
	}
}

위에 구문은 기본적인 구조체 사용법입니다.

위에서 보시다시피 szName , iKor , iMath , iEng가 tagInfo에 묶여 있는 것을 볼 수 있습니다.

기존에는 각각 선언을 해줬어야 했는데 그것을 tagInfo라는 구조체 안에 모아둔 것을 볼 수 있습니다.

 

이를 통해서 각각 연관되어 있는 객체를 쉽게 관리 및 사용이 용이합니다.

 

#include <iostream>

using namespace std;

typedef struct tagInfo
{
	TEST	tTest;
	char	szName[20];
	int		iKor;
	int		iMath;
	int		iEng;
}INFO;

void main()
{
	INFO	tInfo;

	tagInfo tInfo2;
    }

typedef 이미 정의된 형식 혹은 사용자가 선언 형식에 대해서,

보다 짧거나 의미 있는 이름을 생성할 수 있도록 해주는 것. 

 

위에 간단하게 보시면은 struct tagInfo라는 구조체를 명시해 두었습니다.

그리고 typedef를 통해서 INFO라는 이름을 하나 더 명시해준 것과 같습니다.

 

그렇기에 main에 보시면은 INFO와 tagInfo 두 개의 이름으로 변수 선언이 가능합니다.

 

typedef를 통해서 tagInfo에 이름에 INFO라는 이름을 추가해준 것이라고 보는 것이 쉽습니다.

 

//구조체 변수 또한 내부의 멤버들을 선언과 동시에 초기화 가능하다.
//배열의 초기화 문법과 크게 다르지 않다..
//INFO	tInfo3 = {"NellDie", 80, 80, 80};

INFO tInfo3 = 
{
	{"NellDie", 	10, 20},
	"Test",
	20,
	30
};


구조체 멤버의 초기화 예시를 보면 배열과 다르지 않은데 결국 구조체 내부 구조가 하나의 특별 배열로 간주된다는 것을 알 수 있다.
구조체 멤버에 접근하는.이라는 연산자가 구조체 멤버의 인덱스나 다름없는 것이다.

구조체는 메모리상에 선형 구조로 할당이 된다.

.이라는 인덱스를 통해 자료형이 선언된 크기만큼 참조되는 것이다.

 

[개발/C&C++] - (C/C++ 속성 정리) 12일 차 : string 컨테이너

[개발/C&C++] - (C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수

[개발/C&C++] - (C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열

[개발/C&C++] - (C/C++ 속성 정리) 9일 차 : 포인터와 배열

[개발/C&C++] - (C/C++ 속성 정리) 8일 차 : 포인터

[개발/C&C++] - (C/C++ 속성 정리) 7일 차 : 바이트의 저장순서 및 별찍기