구조체를 함수의 인수로 사용할 경우의 문제점
: 구조체의 각 멤버 값이 복사되어 함수로 전달된다. 이 때 구조체의 멤버가 많다면 함수를 호출할 때마다 많은 멤버들을 복사하게 되어 호출이 지연되고 성능 저하가 발생할 수 있다.
💡 구조체 포인터를 인수로 사용하기
-> 함수 호출 시 구조체 변수의 주소만 함수로 넘기기 때문에 속도가 빠르고, 함수 내에서 구조체 변수의 멤버 값을 변경시킬 수 있다.
예시
typedef struct _tagMyST
{
//멤버 a, b
int a;
float b;
}MYST;
MYST s = {}; //구조체 변수 s 초기화
MYST* pST = &s; //포인터 pST가 s의 주소로 접근
pST + 1; //시작 주소에서 8byte씩 증가
(*pST).a = 100;
(*pST).f = 3.14f;
[문법]
(*구조체포인터).멤버변수이름
ex)
(*pST).a
[문법]
구조체포인터->멤버변수이름
ex)
pST->a
//두 방법은 똑같이 동작한다.
(*pST).a = 100;
(*pST).f = 3.14f;
pST->a = 100;
pST->f = 3.14f;
❗ (*pST).a 처럼 표현할 때. 참조 연산자(*)는 멤버 연산자(.)보다 연산자 우선순위가 낮으므로 반드시 괄호(())를 사용해서 역참조를 가장 먼저 해줘야 한다.
[참고]
https://youtu.be/LOR7FNFUS9E
https://nybot-house.tistory.com/21
http://www.tcpschool.com/c/c_struct_pointer