今日はちょっとした疑問を持ってきました。
#include <stdio.h> #include <stdlib.h> typedef struct node_tag{ int value; struct node_tag *next; }node_t; void check(node_t *); node_t * insert_node(node_t *, int ); int main (void){ node_t node1, node2, node3; node_t fake; node_t *head = &node1; fake.value = -1; fake.next = &node1; node1.value = 1; node1.next = &node2; node2.value = 2; node2.next = &node3; node3.value = 3; node3.next = NULL; insert_node(&fake, 5); check(fake.next); return 0; } void check(node_t * com){ node_t * fake; fake = com; do{ printf("test: %d\n", fake->value); fake = fake->next; }while(fake != NULL); } node_t * insert_node(node_t *n, int val){ node_t *new_node; new_node = (node_t *)malloc(sizeof(node_t)); if(new_node == NULL){ fprintf(stderr, "メモリ確保失敗."); return NULL; } new_node->value = val; new_node->next = n->next; n->next = new_node; return new_node; }リストについてなんですが・・・自分で作ってみてダミーノードをfakeとして挿入してみました。
このダミーノードの実装は正解なんでしょうか??意味的に間違っていたらご指摘お願いします。
あと、insert_node関数なんですが、return new_nodeとしてもmain関数内で戻り値を受け取ってません。
でも実行可能なのはなぜなんでしょうか??もしかしたら、プログラム上で必要なければ受け取らなくてもいいんでしょうか??(または、returnを書かなくても ← void関数で使わないのは分かります)
ご協力お願いします。