struct LinkedList
{
int data;
struct LinkedList *next;
};
코드에서 struct LinkedList
의 정의 내에 구조 자체에 대한 포인터가 있습니다. 어떻게 작동합니까?C에서 자기 참조 포인터 란 무엇입니까?
struct LinkedList
{
int data;
struct LinkedList *next;
};
코드에서 struct LinkedList
의 정의 내에 구조 자체에 대한 포인터가 있습니다. 어떻게 작동합니까?C에서 자기 참조 포인터 란 무엇입니까?
따라서 코드
struct LinkedList
{
int data;
struct LinkedList *next;
};
동일한 유형의 다른 객체의 주소를 기억 next
부재와, 두 개의 부재 data
및 next
라는 함유 구조체 타입을 정의한다. 코드를 감안할 때 :
struct LinkedList Node1 = { .data = 1, .next = NULL };
struct LinkedList Node0 = { .data = 0, .next = &Node1 };
당신이 종류의 다음과 같습니다 뭔가 얻을 :
Node0 Node1
+---+--------+ +---+------+
| 0 | &Node1 |--->| 1 | NULL |
+---+--------+ +---+------+
(당신이 결코 링크 된 목록이 길을 만들 것이라고합니다, 이것은 단지 그림을 위해입니다).
이
는 두 가지 이유가있다 :struct
유형의 포인터는 모두 크기와 표현이 같습니다.이것은 자체 참조 데이터 유형의 예이며, 유형이 동일한 유형의 다른 객체에 대한 참조 (포인터)를 저장한다는 것을 의미합니다.
일부인 주소를 가리키는 자체 참조 포인터입니다. 따라서 예를 들어,
typedef struct node {
char data[30];
struct node *this;
struct node *next;
} Node;
*이 항목은 적용되는 항목에 할당 된 경우 자체 참조 포인터입니다. 그것은 끝없는 재귀수록
및명확 셀은 다른 셀을 포함 할 수 없습니다.
그러나 셀에는 다른 셀에 대한 포인터가 포함될 수 있습니다.
this post도 참조하십시오.
당신이 말하는 것은 재귀 데이터 구조체이며 질문은 데이터 구조 자체를 참조하는 방법입니다.
C에서 이것은 데이터 구조의 정의에서 자체에 대한 포인터를 선언함으로써 수행 될 수 있습니다. "self"는 자체 유형의 것을 의미합니다.
식을 쓸 때 데이터 구조가 아직 완료되지 않았습니다. 따라서 정의가 아직 완전히 알려지지 않았기 때문에 한 번만 데이터 구조에 자신의 발생이 포함되도록하는 것은 불가능합니다. 왜냐하면 데이터 구조가 자체 자체의 발생을 포함하는 결말이 결코 없기 때문입니다 ...
그러나 자체에 대한 포인터를 선언 할 수 있습니다. 컴파일러는 이제 포인터에 대한 저장소 만 할당하고 나중에 포인터를 할당/참조 해제하면 지시 된 저장소가 자체 발생을 포함한다는 것을 알게됩니다. 그것이 당신의 예에서 당신이하는 것입니다.
타입이 호환되지 않기 때문에 C에서 자기 참조 * 포인터는 불가능합니다.'int * p = & p;'& p'의 타입은'int **'입니다. – Kninnug
귀하의 C 서적은 무엇을 말합니까? 'struct' 정의와 포인터에서 그 점에서 배워야 만했던 것에서 구체적으로 추론 할 수없는 것은 무엇입니까? 당신이 한 경우 : 수업을 건너 뛰지 마십시오! – Olaf
http://stackoverflow.com/questions/18451788/pointer-to-structure-and-self-pointers – Arun