다음은 포인터를 포인터로 사용하여 링크 된 목록에 노드를 추가하려고하는 간단한 코드입니다.포인터에 대한 포인터 : 참조 멤버 오류
#include <stdio.h>
#include <malloc.h>
struct node
{
int data;
struct node *next;
};
void insert(struct node **root)
{
struct node * temp = (struct node *)malloc(sizeof(struct node));
if(*root == NULL)
{
*(root) = (struct node *) malloc (sizeof(struct node));
*(root)->data = 5;
*(root)->next = temp;
}
else
printf("here");
}
int main()
{
struct node *root = NULL;
insert(&root);
return 0;
}
제 생각에 main()에서 블록은 root
에 할당됩니다. insert
에서 해당 메모리 블록의 주소가 인수로 전달됩니다. 그런 다음 해당 주소의 구조체에 할당 된 메모리 블록이 있는지 확인하고 NULL 인 경우 구조 블록에 메모리를 할당합니다. 나는 다음과 같은 오류가 위의 코드를 실행할 때이 *root
나누었다에 의해 참조해야합니다 내가 잘못 정확히 하겠어 어디
error: request for member 'data' in something not a structure or union
를 이해 할 수 없습니다입니다.
'* (루트) -> 데이터 = 5;'- >>'(* 루트) -> 데이터 = 5; 'BTW : 코드 일부 코드 경로에서'* temp' 메모리를 누설합니다. 그리고 : 캐스트를 제거, 그들은 단지 해를 할 수 있습니다. – wildplasser
그게 효과가 있었어! 고마워. 두 가지 경우에서 우선 순위가 어떻게 다른지에 대해 간략하게 설명해 주시겠습니까? –
다른 사람들은 이미 그렇게했습니다. '->와'.'는 우선 순위가 가장 높습니다 ("더 엄격하게 묶습니다"). '*'는 * 약한 *. '#include'malloc.h는 비표준 헤더입니다. 당신은'stdlib.h'를 원한다. –
wildplasser