안녕하세요 넬다이입니다.
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++ 속성 정리) 17일 차 : 성적표 만들기 및 설계 (0) | 2020.07.07 |
---|---|
(C/C++ 속성 정리) 16일 차 : 메모리 관련 함수 (0) | 2020.07.06 |
(C/C++ 속성 정리) 15일 차 : 포인터와 동적할당 (0) | 2020.07.05 |
(C/C++ 속성 정리) 14일 차 : 함수의 사용방법 (0) | 2020.07.04 |
(C/C++ 속성 정리) 12일 차 : string 컨테이너 (0) | 2020.07.02 |
(C/C++ 속성 정리) 11일 차 : 문자열 및 문자열 함수 (0) | 2020.07.01 |
(C/C++ 속성 정리) 10일 차 : 포인터 심화 및 2차원 배열 (0) | 2020.06.29 |
(C/C++ 속성 정리) 9일 차 : 포인터와 배열 (0) | 2020.06.28 |