53.2 구조체 포인터 배열 초기화
, 김 HM님이 작성안녕하세요.
53.2 구조체 포인터 배열 초기화를 공부하다가
53.1의 구조체 배열 선언하기 부분에서 구조체 배열 초기화와 같이
struct Point2D p1[3] = { { .x = 10, .y = 20 }, { .x = 30, .y = 40 }, { .x = 50, .y = 60 } };
구조체 포인터 배열은 어떻게 초기화하는지 여러가지로 시도하다가 어려움을 겪어 문의 드립니다.
조언 부탁 드립니다.
Re: 53.2 구조체 포인터 배열 초기화
, 도장_ 관리자님이 작성포인터는 메모리를 할당하고, 화살표 연산자 ->로 접근해야 합니다.
정적 메모리 할당된 경우에 . 연산자로 접근할 수 있고,
동적 메모리에 할당된 경우엔 -> 연산자입니다.
이 둘은 혼용할 수 없습니다.
Re: 53.2 구조체 포인터 배열 초기화
, 김 HM님이 작성struct Point2D p1[3] = { { .x = 10, .y = 20 }, { .x = 30, .y = 40 }, { .x = 50, .y = 60 } };위 코드의 p1을 다음과 같이 포인터로 바꿨을 때 초기화는 어떻게 되는지요?
아래 코드가 맞는지요?
제가 code block을 사용하고 있는데
error : expected expression before '->' token
이라는 오류가 발생하네요.
int i = 10, j = 20;
struct Point2D *p1[3] = { { ->x = &i, ->y = &j }, { ->x = &i, ->y = &j }, { ->x = &i, ->y = &j } };
Re: 53.2 구조체 포인터 배열 초기화
, 도장_ 관리자님이 작성UNIT 53.2 예제 struct_pointer_array.c에서 설명한 것처럼
포인터는 malloc으로 메모리를 할당하고 사용해야 합니다.
전부 틀린 문법을 사용했기 때문입니다.
코딩 도장은 중도 학습자를 위한 콘텐츠가 아닙니다.
순차적으로 차례대로 학습하면서 빠진 지식이 없게 기초를 완성하는 게 목표입니다.
포인터를 제대로 학습한다면 UNIT 34부터 시작해야 합니다.
필요한 부분만 찾아서 보는 게 효율적일 것 같지만, 삽질하는 시간이 늘어날 것이고,
삽질하는 시간이 길어질수록 처음부터 제대로 공부하는 것보다 훨씬 더 비효율적으로 공부하는 것이 됩니다.
지엽적인 질문에 답변을 해봐야 질문자의 지식 체계 형성에 도움이 되지 않습니다. 당장 이 문제만 해결하면 이라고 생각하겠지만, 계속해서 더 많은 문제가 발생하고 삽질이 길어지고, 더 많은 지엽적인 질문만 이어질 것입니다. 따라서 이러한 질문이 반복될 때는 답변하지 않습니다. 책의 예제를 온전히 내 것으로 만든 다음에 나만의 코드로 발전할 수 있습니다. 태권도도 발차기부터 제대로 배우는 것이지, 발차기도 제대로 배우지 않은 상태에서 회전 발차기가 될 리가 없습니다. 포인터는 회전 발차기 정도의 난이도가 되겠습니다.
책을 사서 공부하지 않아도 웹 사이트에 공개되어 있으므로 순차적으로 학습하는 게 좋습니다.
물론, 책으로 공부하면 자신의 노트 필기와 함께 자신의 것으로 만들 수 있습니다.