brenda524   3년 전

구조체형 포인트를 사용하는 경우 참조할 때, -> 화살표를 이용하여 arr->x 로 작성한다고 알고 있습니다. 

그런데 아래에서는 &arr[i].x로 작성하여 코딩에 성공하였는데, 여기서 이와 같이 사용해도 되는 이유가 무엇인지 궁금합니다. 

thdtjdals3   3년 전

구조체 배열 arr의 원소 arr[i]는 구조체 포인터가 아니라 그냥 구조체형 변수 아닌가요?

brenda524   3년 전

그 이유에 대해서 여쭤봐도 될까요?

thdtjdals3   3년 전

arr이 struct people* 이고 arr[i] == *(arr+i) 이므로 arr[i]의 자료형은 struct people이 됩니다.

brenda524   3년 전

~이므로 까지 이해가 되는데 이후가 이해가 잘 안 되네요..혹시 조금만 더 자세히 설명해주실 수 있으실까요?

arr[i]는 포인터가 아니라 값이므로 struct people이 자료형이 되는건가요?

thdtjdals3   3년 전

말씀하신대로 arr[i]는 포인터가 아닙니다. 왜냐하면, (제 설명이 틀릴 수도 있지만) arr을 struct people*로 선언하셨기 때문에

arr[i] == *(arr+i), 즉 arr[i]는 포인터를 역참조한 값이 됩니다. 따라서 arr[i]의 자료형은 struct people입니다. 

그래서 "."연산자를 써서 멤버에 접근하는 게 맞습니다.

댓글을 작성하려면 로그인해야 합니다.