구조체
// 값을 리턴하는 경우
USERDATA GetUserData(void) {
USERDATA user = { 0 };
.
.
.
return user;
}
// 주소 값을 받아서, 멤버에 접근하는 경우 필요한 정보만 수정
void GetUserData(USERDATA* pUser) {
USERDATA user = { 0 };
.
.
.
return ;
}
// 구조체를 사용하는 가장 일반적인 예제
int main(void) {
USERDATA user = { 0 };
GetUserData(&user);
printf(%d%t%t, user.age, user.name, use.szPhone)
return 0;
}
구조체와 함수(매개변수, 반환 자료)
구조체 자체를 매개변수를 받으면, 스택 영역을 많이 쓸 수 밖에 없다.
포인터를 활용
간접 지정 연산자는 포인터를 통해 값에 엑세스하는 연산자이다.

구조체를 멤버로 갖는 구조체
[실습] 자기 참조 구조체와 재귀 호출
#include <stdio.h>
typedef struct USERDATA
{
char szName[32];
char szPhone[32];
struct USERDATA* pNext;
} USERDATA;
void node(USERDATA* user) {
while (user != NULL) {
printf("%s\\n", user->szName);
user = user->pNext;
}
}
int main() {
USERDATA userList[5] = {
{ "김두식", "1234", NULL },
{ "이미현", "2345", NULL },
{ "김봉석", "3456", NULL },
{ "장희수", "4567", NULL },
{ "김영수", "4567", NULL }
};
int size = sizeof(userList) / sizeof(USERDATA);
for (int i = 0; i < size - 1; i++) {
userList[i].pNext = &userList[i+1];
}
node(&userList[0]);
return 0;
}
비트필드