구조체 포인터배열에서 메모리할당할때 사용하는 sizeof(struct Point2D *) 의 정확한 의미가 궁금합니다.
, 찬 호님이 작성강의에서 구조체 포인터 배열을 할당할때 for (int i = 0; i < sizeof(p) / sizeof(struct Point2D *); i++) 이런 구문을 사용하던데
sizeof(struct Point2D *)에서 *의 의미가 궁금합니다. 그냥 sizeof(struct Point2D)로 쓰면 안되는지요? 왜 *이 붙는지 그 의미는 무엇인지 설명해주시면 감사하겠습니다.
회신: 구조체 포인터배열에서 메모리할당할때 사용하는 sizeof(struct Point2D *) 의 정확한 의미가 궁금합니다.
, 도장_ 관리자님이 작성sizeof(struct Point2D): Point2D 구조체의 크기
sizeof(struct Point2D *): Point2D를 가리키는 포인터의 크기
둘은 다릅니다.
Unit 53.2에서 변수 p가 struct Point2D *p[3]처럼 포인터로 선언되었기 때문에 *을 씁니다.
struct Point2D *p[3]은
p가 array 3 of pointer to struct Point2D라는 뜻입니다.
struct Point2D에 대한 포인터 3개가 담긴 배열이라는 뜻입니다.
*과 []이 함께 쓰였을 때 []의 우선 순위가 높으니 array of를 먼저 해석합니다.
struct Point2D (*p)[3]은
p가 pointer to array 3 of struct Point2D라는 뜻입니다.
이는 struct Point2D 구조체 3개짜리 배열을 가리키는 포인터라는 뜻입니다.
*가 []보다 우선순위가 낮아서 포인터로 선언하고 싶을 때는 (*p)처럼 ()로 우선순위를 지정해야 합니다.
회신: 구조체 포인터배열에서 메모리할당할때 사용하는 sizeof(struct Point2D *) 의 정확한 의미가 궁금합니다.
, 찬 호님이 작성아 그렇군요. 좋은 답변 좋은 강의 감사합니다.