CS/C

20240109 C - 구조체

싹난 감자 2024. 1. 10. 09:33
#include <stdio.h>

typedef int HP;

typedef struct _SStatus1 {
	double hp;
	int exp;
	char mp;
	char name;
} SStatus1;

typedef struct _SStatus {
	// 구조체 멤버 변수(Member Variables)
	// 구조체 패딩(padding)
	// 배열과 달리 건너 뛸 값이 일정하지 않아서 차라리 빈 메모리를 더해 4byte씩 맞춰서 받아온다. 근데 제일 큰 애 기준으로 패딩함 빠름
	// char과 char은 1byte라 연달아 있으면 한 칸에 같이 들어있어서 4byte씩 같이 읽어온다. double이 있으면 8byte로 맞춘다
	// 따라서 구조체를 만들 때는 4byte씩 나눠서 같이 정리하는 것이 아주 효율적이다
	// 구조체 안에 구조체 가능 안에 구조체 안에 구조체 안에 구조체안에구조체안에구조체안에구조체안에구조체 건축무한육면각체
	// 구조체 안에 구조체 들어있을 경우 해당 구조체의 가장 큰 자료형을 기준으로 패딩된다
	int hp;
	int exp;
	char mp;
	SStatus1 kkkk;
	char name;
	
} SStatus;
//typedef struct _SStatus SStatus;

int main() {
	// 구조체 Structures, Struct
	// 사용자 정의 자료형
	// .: 구조체 멤버 접근 지정자

	struct _SStatus player1 = {5, 3, 10};
	/*player1.hp = 10;
	player1.mp = 5;
	player1.exp = 100;*/

	printf("SStatus Size: %d Byte\n", sizeof(SStatus));

	printf("player1 Address: %p\n", player1);
	printf("player1.hp: %d (%p)\n", player1.hp, &player1.hp);
	printf("player1.mp: %d (%p)\n", player1.mp, &player1.mp);
	printf("player1.name: %d (%p)\n", player1.name, &player1.name);
	printf("player1.exp: %d (%p)\n", player1.exp, &player1.exp);

	HP myHP = 10;

	return 0;
}

'CS > C' 카테고리의 다른 글

20240110 C - 포인터와 메모리 관리  (2) 2024.01.10
20240109 C - Lower, Upper, Swap과 예외처리 문제  (1) 2024.01.10
20240109 C - 2차원 배열  (1) 2024.01.10
20240109 C - 문자열  (0) 2024.01.10
20240105 C - 반복문  (1) 2024.01.08