32. 구조체와 포인터

P4·2023년 6월 15일
0
post-thumbnail

구조체와 포인터

typedef struct _tagMyST
{
	int a; // 멤버
	float f;
} MYST;
  • 위처럼 있을때 안의 요소들은 구조체의 멤버라고 함

  • 변수가 아니라 멤버임

MYST s = {}; // 구조체 초기화
  • MYST = 자료형, s = 변수, 그 안의 s.a는 멤버 (변수가 아닌 이유는 s1.a, s2.a 이렇게 막 늘릴 수 있기 때문)

구조체에서의 포인터 사용법

typedef struct _tagMyST
{
	int a; // 멤버
	float f;
} MYST;
  • 이 구조체를 포인터 변수로 받는다면?
	////////////////////////////////////////////////////
	// 구조체와 포인터

	MYST s = {0, 0.f};

	MYST* pST = &s;

	(*pST).a = 100;
	(*pST).f = 0.4f;

	// 또는?

	pST->a = 200;
	pST->f = 3.14f;

	return 0;
}
  • pST의 크기는 8바이트임 (int와 float)

  • int가 메모리의 4바이트를 차지하는 것처럼, MYST는 8바이트를 차지하고 이제 그 안의 멤버들이 각각 4바이트, 4바이트씩 차지하고 있는거임

  • 그러니까 *을 사용해서 포인터의 값으로 접근한 뒤 멤버를 설정해줘서 값을 변경하면 됨

  • 지금까지 설명했던 포인터의 개념과 완전 같음, 다만 구조체다보니 포인터 변수의 크기가 다르고 .a, .f 또는 ->a, ->f 이런식으로 지정해줘야 하는게 추가됐을 뿐임

profile
지식을 담습니다.

0개의 댓글