Я реализую простую очередь приоритетов в C для ядра, и поэтому я не могу использовать какие-либо стандартные библиотеки. Очередь содержит головной узел, и каждый узел указывает на следующий в очереди.
typedef struct node node;
struct node {
node *next;
void *data;
};
typedef struct {
node *head;
int n;
} queue;
Как видите, каждый узел хранит свои данные в пустоте *. У меня возникли проблемы с преобразованием этих данных, скажем, int, когда я вытаскиваю данные из стека.
//push data
int int_data = 100;
push(q, &int_data);
//...
//pop data
node* popped = pop(q);
int *pop_data = popped->data;
printf("pop data (100): %d\n", *pop_data);
Почему я не могу получить исходное значение здесь? Кажется, я печатаю значение указателя. В качестве альтернативы, есть ли лучший способ справиться с этим?
== изменить (извините, я должен был включить их):
void push(queue *q, void *data)
{
node new;
new.data = data;
node *new_ptr = &new;
if(is_empty(q))
{
q->head = new_ptr;
q->n++;
return;
}
int i;
node *curr = q->head;
for(i=0; i<q->n; i++)
{
curr = curr->next;
}
curr->next = new_ptr;
q->n++;
}
node* pop(queue *q)
{
node *curr = q->head;
q->head = curr->next;
return curr;
}