参照によってポインタを渡すためのエントリが見つかりましたが、実際にそれらを理解できませんでした。Cポインタを参照渡し?
リンクリストにノードを挿入するためにこの関数を記述しました。関数内で動作するように見えますが、linkedList
ポインタの変更はmain関数のポインタの後ろには影響しません。簡単な修正はありますか?教室の例では、linkedList
ポインタがグローバルに宣言されていますが、複数のリンクされたリストを作成できるように、ポインタを渡すことをお勧めします。
void insert(node* linkedList, int value)
{
node* newNode = malloc(sizeof(node));
if (newNode == NULL)
{
// failed to make node
printf("Failed to insert new node!\n");
return;
}
newNode->n = value;
printf("\n");
printf("Before insert: \n");
printf("\n");
printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);
printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);
newNode->next = linkedList;
linkedList = newNode;
printf("\n");
printf("After insert: \n");
printf("\n");
printf("linkedList ptr : %p\n", linkedList);
printf("linkedList->n : %i\n", linkedList->n);
printf("LinkedList->next : %p\n", linkedList->next);
printf("\n");
printf("newNode ptr : %p\n", newNode);
printf("newNode->n : %i\n", newNode->n);
printf("newNode->next : %p\n", newNode->next);
}
確かに簡単な修正があります。「void insert」を取り除いて頭を戻してください。 –
または、ダブルポインタを使用し、参照を使用して値を更新してください。 – Haris
私はあまりにもそれを提案しようとしていた。新しいリンクリストが返されました。次のように使います: 'list = insert(list、number)' – nielsbot