사용자 정의 자료형: 사용자의 필요에 따라 자료형을 직접 만들어서 사용하기 시작한 것. 자료 타입에 해당하는 키워드를 반드시 삽입하여 자료형을 제작해야함
c언어 시절 - 구조체(struct) , 공용체(union), 열거체(enum) c++ - 구조체(struct) , 공용체(union), 열거체(enum), 클래스(class)
보통 구조체는 함수 안이 아닌, 함수 밖에 만들게 됨. 이름에는 관습적으로 tag를 붙여옴
구조체 생성.
struct tagInfo{
int ikor; //구조체 멤버 변수
float fAver; //구조체 멤버 변수
}
int main(){
tagInfo tinfo; //구조체 변수를 선언.
tagInfo tinfo ={0, 0.f}; //구조체 변수를 선언과 동시에 초기화.
cin << tInfo.iKor; (.은 멤버 접근 연산자)
tagInfo tTemp[3] = {};
tagInfo* pTemp = &tinfo; (포인터 물론 가능함)
*pTemp.iKor = 200;(참조 물론 가능함)
pTemp->iKor =200; (위와 같은 형태. 포인터만 가능)
return 0;
}
C언어 환경 (C++ 아님)
struct tagInfo{
int ikor;
float fAver;
}
int main(){
struct tagInfo tinfo;
//c언어 시절에는 키워드 삽입이 반드시 필요했다.
tagInfo tinfo ={10, 3.14f};
printf("%d", tInfo.iKor);
return 0;
}
그렇기에
C언어 환경 (C++ 아님)
typedef struct tagInfo{
int ikor;
float fAver;
}INFO;
int main(){
INFO; tagInfo tinfo;
//타입 디파인을 사용했음.
tagInfo tinfo ={10, 3.14f};
printf("%d", tInfo.iKor);
return 0;
}
typedef struct tagInfo{
int ikor;
float fAver;
void Render(){
...C시절에는 구조체 안에 함수가 존재할 수 없었다.
}
}INFO;
struct tagInfo{
int ikor;
float fAver;
void Render(){
C++부터는 구조체 안에 함수를 선언할 수 있다. (멤버 함수)
}
}INFO;
구조체는 멤버 변수와 함수가 없다고 하더라도, 있다는 것은 메모리에 저장해야 하기에 디폴트로 1바이트 크기를 가짐.
또한 멤버 변수를 가질 경우 모두 합한 바이트를 가지게 됨.
tagInfo tinfo ={10, 3.14f};
블록 단위 메모리로 초기화 하는 문법이다.
그렇기에 가장 큰 바이트 단위로 할당을 하게 됨.
그렇기에 float기준으로 4바이트를 기준으로 메모리를 할당하게 되는 것임
struct tagInfo{
char ikor; 1
shor ikor; 2
float fAver; 4
};
이건 가장 큰 4바이트 기준으로 블록을 가지지만! 1바이트와 2바이트는 4바이트 블럭 안에 두개를 넣을 수 있기에 총 8바이트 구조체임.
그렇기에 작은 것부터 위에서 할당하는 것이 좋다.
struct tagInfo{
char ikor; 1
shor ikor; 2
doubli fAver; 8
};
struct tagInfo2{
char ikor; 1
shor ikor; 2
float fAver; 4
tagInfo tInfo;
};
이거는 속에 들어간 구조체의 메모리 블럭까지 함께 계산함 크기를 계산할 때에는 기본 자료형을 기준으로 계산하게 됨.