Я пытаюсь сделать один связанный список для Python, используя C api. Этот материал работает:Один связанный список для python с использованием C api
typedef struct list {
int item;
struct list *next;
} list;
void insert(list **self, int item) {
list *p = malloc(sizeof(list));
p->item = item;
p->next = *self;
*self = p;
}
int main() {
list *myList = NULL;
insert(&myList, 1);
return 0;
}
но Python C использование API * самостоятельно, а ** я. Итак, как это работает, если функция вставки будет выглядеть так:
void insert(list *self, int item) {
в примере, который вы показываете, функция 'insert' принимает указатель на указатель на' list'. Первый указатель затем разыменовывается, чтобы читать, а затем менять указатель, указывающий на структуру «list». Вы спрашиваете, как это сделать для чтения и изменения, если указатель на структуру списка ('list * self') передается функции вместо указателя на указатель? –
Да. Я хочу отправить myList в вставку без амперсанда –
решение для чего вы хотите получить доступ с помощью 'self' вместо' * self', то есть 'p-> next = self;', но это также означает, что, self = p; 'на следующей строке, вы только изменяете копию своей функции этого указателя, и вызывающий не увидит изменения. Способ обойти это заключается в передаче указателя на указатель, как в коде, который вы указали. Что именно вам нужно делать? –