[C] 구조체 포인터에서 -> 연산자를 풀어쓰면...

gurumong의 이미지

구조체를 가르키는 포인터를 사용해서 그 구조체의 맴버에 접근하려면 -> 연산자를 사용하잖아요
그 표현을 풀어쓰면 (* strudt).member 로 표현되는것으로 알고있는데

a->b->c 와 같은 표현을 풀어쓰면 아래와 같이 되는데
(*(*(*a).b).c)

이와 같이 쓰면 완전히 잘못된것인가요?
(*a).(*b).(*c)

swirlpotato의 이미지

a->b->c 는 (((a)->b)->c) 입니다.
(*(*(*a).b).c)는 ***a.b.c 지만 . 연산자가 *보다 우선순위가 높기 때문에 괄호를 넣은 것 뿐입니다.

(*a).(*b).(*c)는 컴파일 에러 날 듯 싶은데 어떤 결과가 나오나요?

cppig1995의 이미지

a->b(*a).b가 되겠고, a->b->c(a->b)->c이니 ((*a).b).c여야겠죠.

그리고, (*b)(*c) 부분은 애초에 위법입니다. 구조체 소속의 변수[member variable] 이름들은 . 오른쪽에 쓰였을 때만 의미를 가진다는 점을 다시 생각해 보세요.

마지막으로, (*(*(*a).b).c)a->b->*c입니다.

> What is the difference between software and hard water?
} Bugs drown in hard water, but live forever in software.

Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.

swirlpotato의 이미지

그렇네요
생각없이 쓰다보니 마지막 ->c까지 * 을 해버렸네요