以下は、リンク先リストにノードを追加するためのポインタへのポインタを使用しようとしている簡単なコードです。ポインタへのポインタ:参照するメンバのエラー
#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の場合は構造体ブロックにメモリを割り当てます。
error: request for member 'data' in something not a structure or union
私は正確に間違ったつもりかを理解することはできませんよ。そして、これは私が上記のコードを実行したときに、私は次のエラーを取得する*root
.Butによって参照されなければなりません。
'*(ルート) - >データ= 5;' - >> '(*ルート) - >データ= 5;'ところで:あなたのコードいくつかのコードパスで '* temp'メモリをリークします。そして:キャストを取り除く、彼らは唯一の害を行うことができます。 – wildplasser
それは働いた!お気軽に@wildplasser。 2つのケースで優先順位がどのように異なるかについて簡単に説明してください。 –
他は既にそれをしています。 ' - >'と '.'が最も優先順位が高くなります(" bind tighter ")。 '*'は*弱い*。 '#include' malloc.hは非標準ヘッダです。 'stdlib.h'が必要です –
wildplasser