Как и большинство новичков в C, я реализую простой связанный список.
Каждый узел списка определяется так:
typedef struct list_node {
void * data;
struct list_node * next;
} list_node_t;
Я сделал тестовую программу для создания и повторения списка. Операции создания и вставки работают корректно. Однако приведенный ниже код вызывает у меня проблемы:
list_node_t * node = NULL;
list_iter_reset(list, node);
if (node == NULL) {
printf("Node is NULL.\n");
} else {
printf("Node is not NULL.\n");
}
fflush(stdout);
Функция list_iter_reset()
определена ниже. Обратите внимание, что list->head
не указывает на NULL, так как ранее я вставлял узлы в список.
void list_iter_reset(list_t list, list_node_t * node)
{
node = list->head;
if (node == NULL) {
printf("Node is NULL.\n");
} else {
printf("Node is not NULL.\n");
}
fflush(stdout);
}
Результат выполнения этого кода следующий:
Node is not NULL.
Node is NULL.
Поскольку я передаю указатель на узел функции, почему созданный узел в тестовой программе все еще указывает на NULL после вызова этой функции?
Я предполагаю, что простой арифметический аспект указателя здесь прошел мимо моей головы. Я искал вокруг и не мог найти подобную проблему.
Заранее спасибо.
list_node_t**
) функции, а не указатель. Функция изменяет значение указателя (node
), но это никогда не возвращается к вызывающей стороне. - person Rotem   schedule 09.12.2018list_node* &node
- person Greg K.   schedule 09.12.2018c
. Ссылок нет. - person Rotem   schedule 09.12.2018int
функции и ожидаете, что функция изменит этотint
. Вам, конечно, придется пройтиint*
, верно? Это то же самое, за исключением заменыint
наnode*
, поэтому вам нужно передатьnode**
. - person Rotem   schedule 09.12.2018