:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
11/04/16 16:52
본문에서 좀 의아한 부분이..
struct hash int data; struct hash *ptrhash; 여기서 발생 할 수 있는 에러가.. struct node int overflow; struct node *ptrnode; 왜 여기서 발생 하지 않는다고 생각하시는지 모르겠네요.
11/04/16 18:12
질문을 알아듣기가 어렵습니다.
"해당 함수내에서 데이터를 못찾을 경우 포인터 함수를 체크해서 해당 포인터 함수가 널이 아닌경우 그 포인터가 가르키고 있는 구조체도 체크를 하려는데 제 생각에는 그렇게 하려면 함수내에서 함수를 콜해야 하거든요." 이 부분에서 해당함수란 예컨대 search 같은 function을 뜻할 테고, search할 대상이 tree면, 확인하고 싶은 subtree의 root가 parameter로 넘어가거나 할 텐데, 거기서 "해당 포인터 함수"가 사실 field를 의미하는 건지, field라면 왜 그 field를 갖고 search 함수를 recursive하게 call하는 게 아니라 그 field를 call하는 건지 뭔가 이해가 되지 않네요. 질문에 답하자면, struct node 안에 struct node* 타입의 field를 정의하는 건 아무 문제가 없습니다. 컴파일러 자체가 node를 인식하는 건 당연히 아닙니다.
11/04/16 22:09
struct hash 안에서 struct hash* 변수를 사용하는 것은 아무 문제가 없습니다. 교수님께서 순간적으로 착각하신 게 아닌가 싶군요.
구조체 정의시 임의의 다른 (아직 정의되지 않은) 구조체에 대한 pointer를 사용하는 것도 역시 아무 문제가 없습니다. 두 구조체가 서로를 참조하는 포인터를 사용하고 싶은 경우, 하나가 완전히 정의되지 않은 상태에서 다른 하나가 정의되어야 함을 이해하신다면, 이럴 수밖에 없음을 이해하실 수 있을 겁니다. 다만, 아주 예전에는 이런 경우 전방 선언을 요구했었는데, 어느 때부터인가 그럴 필요가 없어진 것 같습니다. (어떤 이름의 구조체가 있을 것이라고 이름만 미리 알려준다는 것이 컴파일러에게 별 도움이 되지 않으니까요. 함수의 전방 선언 - prototype - 과는 많이 다르죠) 물론 실제로 실행을 시킬려면 정의에 사용된 임의의 구조체의 실제 정의가 실제로 있어야합니다. PS) 뒤늦게 첨부 파일을 보았습니다. 정말 compile되고 돌아가나요? 예를 들어 left와 right를 (struct node*가 아닌) struct tree*로 선언해야 할 듯 한데? 첨부 파일은 개념을 설명했을 뿐, 실제로는 에러가 조금 많이 있는 듯 합니다.
|