[c++] 구조체 포인터

TNT·2024년 5월 15일

c++ 기초

목록 보기
6/19

구조체 포인터

포인터 는 주소 값
구조체는 자신이 직접 만드는 타입형 으로 알고있다.

typedef struct _tagMyST {
	int age;
	float cm;
}MYST;

보통 이렇게 만들어진다.
그러면 이렇게 만들어진 자료형을 여러개 쓸수도 있다.
근데 직접 만드는 자료형이라서 보통 여러개의 변수를 묶어서 많이 쓰는데 이때 크기가 많이 커진다.

이런 자료형을 사용할경우 복사 하기도 하고 함수 매개 변수로 넘기고 하면 점점 복사 되는 크기가 커지기에 이것도 역시 포인터로 주소 값을 보내는 것이다.

예시로

typedef struct _tagMyST {
	int age;
	float cm;
}MYST;

int main() {
	MYST s = {};

	MYST* pST = &s;

	pST + 1;


	return 0;
}

위에 서 보는 코드에서 보면 s로 8byte 짜리 변수를 선언 하고 주소 값을 pST에 저장을했다.
그러고 주소값에 + 1 해주게 된다면 몇 Byte 증가인가 MYST 자료형이 8byte 짜리 닌까 8byte 증가 이다.
포인터랑 개념이 완전히 똑같다

그러면 그 주소 값으로 갔을때 보이는값음 pST; 안에있는 age 값을것이다.
그러면 구조체 변수를 지정하고 싶다고 한다면 (
pST).age; 이렇게 지정 해야한다.
그러면 주소값을로 원본 데이터 변수에 값을 변경 할수도 있고 데이터 값을 확인 할수도있다.

정리 및 주의사항

typedef struct _tagMyST {
	int age;
	float cm;
}MYST;

int main() {
	MYST s = {};

	MYST* pST = &s;
    
    *pST; // pST 변수에 제일 첫번째 값인 age를 지칭
    
    // 구조체를 역참조 해서 하나씩 보고싶은경우는 이렇게 참조 
    (*pST).age = 100; // 값을 바꿀수도 있다.
    (*pST).cm;
    
    // 괄호 쓰는게 귀찮고 해서 나온 표현식은
    pST->age; // 으로도 사용할수있다.

	return 0;
}

만약 지정한 주소 값인줄 알고 (*pST).cm = 3.14; 를 넣있는데 하지만 pST는 구조체 변수가 아닌 char 형태였다고 한다면
그 안에 int 즉 4byte 를 건너서 그뒤로 부터 데이터를 넣는데 거기엔 무슨 메모리가 할당 되어있을지 모르니 큰 문제가 발생한다.

포인터 개념이랑 다른게 없다 포인터 특징도 그대로 가지고 있으니 조심해서 사용하자

profile
개발

0개의 댓글