구조체

사용자 정의 자료형: 사용자의 필요에 따라 자료형을 직접 만들어서 사용하기 시작한 것. 자료 타입에 해당하는 키워드를 반드시 삽입하여 자료형을 제작해야함

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;
}

TMI

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;
}

TMI

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;
};

이거는 속에 들어간 구조체의 메모리 블럭까지 함께 계산함 크기를 계산할 때에는 기본 자료형을 기준으로 계산하게 됨.