c언어 구조체 포인터 배열 함수에 parameter 전달 질문

c언어
(what!!) #1

함수에 구조체 포인터 배열의 배열이름을 넘겨주고 싶은데

typedef struct userInfoStruct
{
	char name[20];
	char moneyNo[9];
	int money;
}USERINFO;

void fun(USERINFO * arrUserInfo){

}

구조체를 동적 할당해서 구조체 주소를 구조체 포인터 배열에 담고(코드생략)
그 포인터 배열을 활용하기 위해서 fun에 구조체 포인터 배열이름(주소)을 fun에 넘겨주는데요.
위 함수 처럼 작성하고

배열이름을 통해 구조체에 접근하기위해

arrUserInfo[index]->멤버이름

이렇게 접근했는데요. invalid type argument ‘->’ 라고 오류가 뜨더라고요

arrUserInfo 배열안에 포인터가 들어있으니 -> 를 통해 접근하는게 맞는거 아닌가요?

(하하아하) #2

배열 자체가 주소이기 때문에
arrUserInfo[index] 하게되면 *(arrUserInfo + index) 한게 되용

이상태에선 배열 원소를 사용하는거지 포인터를 사용하는게 아니졍(이 표현이 맞나요?)

2 Likes
(얼음나무) #3

arrUserInfo 배열 안에는 USERINFO struct가 들어있지, 포인터가 들어있지 않습니다.

(what!!) #4

배열 원소를 사용하기위해서
arrUserInfo[index]->멤버이름 를 사용한겁니다.

arrUserInfo 배열안에 구조체를 동적할당한 주소(구조체 포인터)가 있으니까 그주소를 통해서 구조체에 접근하려고 합니다

(what!!) #5

구조체를 동적 할당해서 구조체 주소를 구조체 포인터 배열에 담는다고 위에서 언급을 했는데 이렇게 되면 arrUserInfo 안에는 구조체 주소 가 들어있는거 아닌가요…??

(하하아하) #6

말씀하신 대로라면 오류가 나는게 잘 이해가 안가네용…
코드 보여주실 수 있나요?

(what!!) #8

fun 함수에서 매개변수를 잘못 선언한것 같네요

USERIFNO** arrUserInfo 로 선언하니까

프로그램 실행이 되네요…

(P.노우렛지Δ) #9

이미 arrUserInfo[index] 한 시점에서 index 번째의 USERINFO 구조체입니다. 따라서 포인터형이 아니므로 -> 연산자를 사용할 수 없습니다.

arrUserInfo[index].멤버이름 식으로 하시면 될겁니다.

수정)

그렇다면 매개변수를 잘못 설정하신 것이 맞습니다.

이렇게 하셔도 되고, USERINFO* arrUserInfo[] 라고 하시는 편이 더 보기 좋을겁니다.

왜 이렇게 되는지는

여기에 답변을 남겨두었으므로 참고하시면 좋습니다.

2 Likes