Я пытаюсь реализовать функцию свопинга для связанного списка.c - функция подкачки для односвязного списка строк
инициализации выглядит следующим образом
typedef struct node
{
char data[50]; // data
struct node *next; // a pointer to next node
} Node;
typedef Node* NodePtr;
В одной из моих функций я пытаюсь поменять местами две функции с помощью
swap(&(p->data), &(q->data));
где p
и q
являются NodePtr
«s.
Моя функция своп выглядит следующим образом:
void swap(char *a, char *b)
{
char *t; // temporary
t = *a;
*a = *b;
*b = t;
} // end swap()
Я получаю следующее сообщение об ошибке: [Error] cannot convert 'char (*)[50]' to 'char*' for argument '1' to 'void swap(char*, char*)'
Я знаю, это означает, что мне нужно изменить, как я объявляю свои функции, но я просто не уверен, как изменить их, чтобы правильно делать то, что я хочу.
Проблема заключается в том, что 'data' не является указателем, это массив, и ваша функция подкачки работает только в том случае, если' data' является указателем. У вас есть два варианта: a) сделать 'data' указателем (и иметь дело с управлением памятью), или b) скопировать байты массива в функцию swap. – user3386109
Функциональность свопа, которую вы * видимо * пытаетесь реализовать, имеет * ничего * со связанным списком. Все это, похоже, пытается сделать, это буферы обмена swap, и пропускает лодку в декларации, обращаясь к * и * разыменованию. Какова фактическая * проблема *, которую вы пытаетесь решить? «Функция подкачки для связанного списка» не является проблемой. То, что сказано - функция должна * делать * и как она должна быть * использована * ?? – WhozCraig
@WhozCraig это была просто функция сортировки, с которой я играл. – user2958395