정지현 님이 쓰신 글 :
: linked list에 대해서 공부하다가
: 구조체 부분을 value에 의해 리턴받는 함수에서 막히는게 있어서 질문올립니다.
:
: NODE crNode(int value)
: {
: NODE tmpNode;
:
: tmpNode.value=value;
: return tmpNode;
: }
:
: NODE* insNode(NODE* prev,NODE* iNode)
: {
: NODE* tmpNode;
:
: tmpNode=(NODE*)calloc(1,sizeof(NODE));
: *tmpNode=*iNode;
: return tmpNode;
: }
:
: 위와 같은 두 함수가 있고, main에서
:
: insNode(pnode, &crNode(val1));
: 이런식으로 사용이 가능할까요?
:
: 어떤 함수의 인수로 포인터변수를 넘겨줄 때
: 그 인수에 바로 다른 함수를 사용하면서 그함수에서 리턴받은 변수의 주소값을 넘겨주려면 어떻게 해야하나요..
:
: 위 함수는
: crNode에서 구조체의 각 필드값을 입력받아 구조체를 생성하여 insNode에 복사하려고 합니다.
: 뭐.. 애초에 insNode 함수에서 새로운 노드를 생성하지 않고 crNode에서 생성한 구조체를 바로 사용해도 되겠지만
:
: crNode에서 리턴받은 구조체의 주소값을 바로 다른 함수의 인수로 사용하려면 어떻게 해야하는지 궁금하네요..
: 즐거운 하루 되세요 ^^
insNode(pnode, &crNode(val1));는 할 수 없습니다.
crNode는 NODE 인스턴스를 반환하는데 반환하는 방법은 복사에 의한 것입니다.
즉, 복사할 대상 위치가 이미 정해져 있어야 합니다.
변수에 대입하거나 다른 함수를 호출할 때 값에 의하여 전달하는 게 바로 그것입니다.
제시하신 코드에서와 같이, 그 주소를 구할 수 있도록 되어 있지 않습니다.
아래와 같이 하셔야 합니다.
NODE* crNode(int value)
{
NODE *tmpNode=(NODE*)calloc(1,sizeof(NODE));
tmpNode->value=value;
return tmpNode;
}
insNode(pnode, crNode(val1));
|