------------------------------------------------------------------
------------------------------------------------------------------
------------------------------------------------------------------
구조체 포인터도
우리가 앞에서 배운 일반적인 포인터 변수와 같습니다.
*(별) 연산자를 이용해
참조하고
주소가 가리키는 곳의 메모리를 참조합니다.
------------------------------------------------------------------
특별히 구조체 포인터에선
화살표 연산자 라는 것을 쓸 수 있는데
기능은 앞에서 본 참조 연산자의 기능과 동일하지만
훨씬 쉽고 편하게 쓸 수 있어서
자료구조에서 정말 많이 쓰이게 되는 연산자 입니다.
------------------------------------------------------------------
우선 첫번째 예제를 살펴보면
일단 처음에
person 구조체를 정의하고 있습니다.
------------------------------------------------------------------
11번째 줄에서 person 구조체 변수 p를 선언하고
12번째 줄에서 person 구조체 포인터 변수 ptr을 선언했습니다.
------------------------------------------------------------------
14번째, 15번째 줄에서
구조체변수 p에 값을 대입하고 있습니다.
------------------------------------------------------------------
17번째 줄에서
구조체 포인터 변수 ptr에 p의 주소를 대입하고 있습니다.
이렇게 되면
구조체 포인터 변수 ptr이 구조체 변수 p를 가리키게 됩니다.
그림으로 자세히 보겠습니다.
------------------------------------------------------------------
이렇게
구조체 포인터 변수 ptr이
구조체 변수 p를 가리키고 있습니다.
------------------------------------------------------------------
그 다음
19번재, 20번째 줄에서는
화살표 연산자를 사용하여
ptr이 가리키는 곳의 age와 height 를 출력하고 있습니다.
------------------------------------------------------------------
실행결과는 다음과 같습니다.
------------------------------------------------------------------
다음 예제를 살펴보면
자주 보았던 point 구조체의 정의입니다.
------------------------------------------------------------------
우선, 첫번째 코드를 살펴보겠습니다.
------------------------------------------------------------------
11번째 12번째 줄에서
구조체 변수를 선언하고 값을 초기화 하고 있습니다.
------------------------------------------------------------------
14번째 줄에서
구조체 포인터 변수 pptr을 선언하고
구조체 변수 pos1의 주소를 대입하고 있습니다.
,
구조체 포인터 변수에
구조체 변수의 주소를 대입하게 되면
구조체 포인터 변수가, 구조체 변수를 가리키는 모양이 됩니다.
이것을 그림으로 자세히 살펴보겠습니다.
------------------------------------------------------------------
구조체 포인터 변수 pptr에
구조체 변수 pos1의 주소를 대입하여
pptr이 pos1을 가리키는 모양입니다.
------------------------------------------------------------------
그 다음 15번째, 16번째 줄에서
참조연산자 *을 이용해서
pptr이 가리키는 곳의 xpos에 4를 더하고
pptr이 가리키는 곳의 ypos에 5를 더하여
구조체 변수의 값을 변경하고 있습니다.
그림으로 자세히 살펴보면
------------------------------------------------------------------
구조체 포인터 변수 pptr이 가리키는 곳의
xpos에 4를 더하고
ypos에 5를 더하여
값을 변경했습니다.
------------------------------------------------------------------
좀 더 자세하게 풀어보면
pptr이 가리키는 곳의 xpos의 값에 4를 더해서
pptr이 가리키는 곳의 xpos의 변수 공간에 대입하고 있습니다.
pptr이 가리키는 곳의 ypos의 값에 5를 더해서
pptr이 가리키는 곳의 ypos의 변수 공간에 대입하고 있습니다.
------------------------------------------------------------------
19번째 줄에서는
구조체 포인터 변수 pptr에 구조체 변수 pos2의 주소를 대입했습니다.
원래 구조체 변수 pos1의 주소가 들어있다가
pos2로 변경되었으므로
주소가 바뀌어 가리키는 대상이 변경 되었습니다.
이것을 그림으로 살펴보겠습니다.
------------------------------------------------------------------
구조체 포인터 변수 pptr이 가리키는 곳의
xpos에 4를 더하고
ypos에 5를 더하여
값을 변경했습니다.
------------------------------------------------------------------
20번째
21번째 줄에서 사용하는
-> 화살표 모양 연산자는
화살표 연산자라고 부르며
위에서 썼던 참조연산자와 기능이 같습니다.
구조체 포인터 변수에서 사용할 수 있으며
구조체 포인터변수가 가리키는 곳을 참조할수 있게 만드는 연산자 입니다.
20번째 줄에서
pptr이 가리키는 곳의 xpos에 1을 더하여 저장하고 있습니다.
21번째 줄에서
pptr이 가리키는 곳의 ypos에 2를 더하여 저장하고 있습니다.
------------------------------------------------------------------
구조체 포인터 변수 pptr이 가리키는 곳의
xpos에 4를 더하고
ypos에 5를 더하여
값을 변경했습니다.
------------------------------------------------------------------
그래서 이 코드를 실행하면
------------------------------------------------------------------
실행결과가 다음과 같습니다.
------------------------------------------------------------------
'C_프로그래밍' 카테고리의 다른 글
[C 프로그래밍] 43장. 동적할당(2) (0) | 2020.04.07 |
---|---|
[C 프로그래밍] 42장. 동적할당(1) (0) | 2020.04.07 |
[C 프로그래밍] 40장. 구조체 배열 (0) | 2020.04.07 |
[C 프로그래밍] 39장. 구조체 (0) | 2020.04.06 |
[C 프로그래밍] 38장. 상수형 문자열 (0) | 2020.04.06 |