구조체 포인터 쓰임새
- 구조체 포인터에는 구조체의 주소가 들어가야함.
struct a A;
struct a *ptr;
ptr = &A
- 구조체 포인터를 통한 해당 주소의 구조체 멤버변수 접근법
(*ptr).member;
ptr->member;
- 구조체내의 포인터를 사용하는 방법
- -> 연산자는 * 연산자보다 우선순위가 높기 때문에 아래와 같은 코드 사용가능.
struct a{
int value;
int * pointer;
};
...
struct a A;
struct a *ptr;
ptr = &A;
int b = 0;
ptr->pointer = &b; // 구조체 내에 포인터에 주소지정
*ptr->pointer = 33; // 구조체 내에 포인터에 지정된 값에 변수 넣음.
- 구조체의 멤버변수의 주소를 함수랑 같이 응용하는 법
// 구조체 선언
struct a{
int value;
};
...
// 함수선언
int add_one(int * );
...
// main문
struct a A;
struct a *ptr;
ptr = &A;
// 멤버변수의 주소를 &과 합쳐 활용
int add_one(&A.value);
int add_one(&ptr->value);
구조체로 인자 전달하기
- 구조체 초기화를 위해 함수를 만들었지만
구조체를 초기화 시켜주지 않으면 사용할 수 가 없었다.
- 구조체 포인터를 이용해서 초기화 시켜주기로 했다.
struct TEST{
int age;
int gender;
};
struct a A;
...
// 구조체 초기화 함수
set_human(&A, 10, 1);
...
int set_human(struct TEST * a, int age, int gender){
a->age =age;
a->gender = gender;
return 0;
}
참고