PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2011/04/16 16:36:48
Name zeros
File #1 돌아가는거.txt (2.3 KB), Download : 14
Subject c 프로그래밍 중 질문입니다
현재 자료구조 수업을 수강중인데요. 트리, 해쉬 등을 만들다가 의문이 생겨 질문글을 남깁니다.
어느 한 구조체 안에 구조체 포인터를 포함시켜 데이터의 오버플로우 등이 일어나는 경우 동적 할당을 통해
링크드리스트 처럼 이어지게 만드려고 하는데요,
수업시간에 교수님께서는 어떤 구조체 안에 같은 형식의 구조체 포인터를 만들면 오류가 날 수 있다고 하시더라구요
예를 들면,
struct hash{
int data;
struct hash *ptrhash;
};

이런식으로 하면 말이죠.
그래서
struct hash{
int data
struct node *ptrnode;
};

struct node{
int overflow;
struct node *ptrnode;
};

이런식으로 선언을 한뒤 진행중인데, 데이터 서치나 삽입, 삭제 부분에서 많이 번거로워지네요..
해당 함수내에서 데이터를 못찾을 경우 포인터 함수를 체크해서 해당 포인터 함수가 널이 아닌경우 그 포인터가 가르키고 있는
구조체도 체크를 하려는데 제 생각에는 그렇게 하려면 함수내에서 함수를 콜해야 하거든요.
예를 들면 서치함수 내에서 키값을 못찾았는데 포인터 함수가 널이아니면 그 포인터 함수가 가르키고 있는 구조체를 파라미터로 넘겨서
다시 찾는식이죠. 그런데 위에서 보셨듯이 처음 구조체랑 노드로 쓰는 구조체가 다르니까 코딩이 엄청 지저분해지더라구요 ㅠㅠ
그러다가 한 동기가 어디서 구한 코딩을 보여줬는데, 거기서는 따로 node에대한 선언도 없이 구조체 안에서 사용하는데도
에러가 뜨지가 않더라구요..
컴파일러 자체에서 node라는 것을 인식하는것인지 궁금합니다.
동기가 구해온 코딩은 첨부파일에 있으니 참고해주시면 되겠습니다.

어떻게 따로 struct node 를 선언하지도 않았는데 다른 구조체 안에서 struct node *node; 같은것을 사용할 수 있는건가요??

통합규정 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*로 선언해야 할 듯 한데? 첨부 파일은 개념을 설명했을 뿐, 실제로는 에러가 조금 많이 있는 듯 합니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
103057 win7 64비트에서 사용가능한 녹음/편집툴 추천부탁드립니다. 충달1613 11/04/16 1613
103055 영화보다가 원하는부분만 짜를수있습니까? [2] 아레스1759 11/04/16 1759
103054 방충망 청소법 좀 가르쳐주십시오!!! [1] 조폭블루2052 11/04/16 2052
103052 정보체계론 공부해셨던 분들에게 질문 티티1674 11/04/16 1674
103051 퀄리티 좋은 반팔 브랜드 어떤게 있을까요? [3] worcs2368 11/04/16 2368
103050 테스트 마케팅에대해서 질문이 있습니다. 으컁/1604 11/04/16 1604
103049 c 프로그래밍 중 질문입니다 [5] zeros1754 11/04/16 1754
103048 헬스 바벨 질문입니다. [5] 승뢰1954 11/04/16 1954
103047 프로야구 원년부터 지금까지... 왼손잡이 포수 있었나요??? [14] 마산갈매기2521 11/04/16 2521
103046 4드론 vs 생더블 [12] 블루베리3228 11/04/16 3228
103045 선거후보 사무실에서 제 개인정보를 알고있습니다. 당황스럽네요. [2] 시크릿전효성2154 11/04/16 2154
103044 치과 충치 치료중에.. [4] 닥치고어택땅2336 11/04/16 2336
103043 공공장소에 대한 인식이 정말 개인주의로 변한건가요? [20] BLACK-RAIN2619 11/04/16 2619
103042 지금 엠겜 막청승조합 영상 브금이 궁금합니다. [2] 투명망토1937 11/04/16 1937
103041 이화여대 남자 출입통제시간 질문입니다. [2] 참죽5508 11/04/16 5508
103040 김태원 멘토의 주옥같은 멘트 [3] 하나2678 11/04/16 2678
103039 안녕하세요 수능을 다시보려고 합니다. 몇가지 질문이 있습니다. [8] 짝복2173 11/04/16 2173
103038 눈을 누가 누르는 것처럼 아픕니다. [3] I아이유U2189 11/04/16 2189
103037 "동기화"가 무엇인가요? [2] marchrabbit2120 11/04/16 2120
103036 한국이 현대 세계에 긍정적인 영향을 미친적이 있나요? [10] 그렁너2133 11/04/16 2133
103035 간단한 엑셀 질문입니다.(그림첨부) [4] 구라타2573 11/04/16 2573
103032 속보(경보)로 뱃살 빼신분 있나요? [9] 다음세기3252 11/04/16 3252
103031 유게에 글을 올렸는데 댓글창이 안뜹니다. [3] 금영롱1661 11/04/16 1661
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로