Как ссылаться на указатель и изменять адрес - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я работаю над алгоритмом, на который я хочу указать какую-то структуру.Указатель на структуру передается вокруг некоторых.Я не понимаю, как изменить адрес указателя, передав ссылку на него в функцию.Проблема демонстрируется в коде ниже:

cdef int there=42

cdef void point_to_there(int** a):
    a[0] = &there

cdef int *a
a[0] = 13
print a[0]
point_to_there(&a)
print a[0]

дает

13
13

Но я бы хотел дать

13
42

Словами, как я представляюэто выглядит следующим образом:

there - целое число, определенное в куче

point_to_there берет указатель на указатель на int и получает указатель на int для указания наthere (это полный рот)

cdef int *a выделяет указатель на int

point_to_there(&a) передает ссылку на указатель на int в функцию, так что указатель наint (a) указывает на there, что составляет 42.

Но это не так.Что я недопонимаю?

1 Ответ

0 голосов
/ 05 декабря 2018

Как отметил DavidW в комментариях

cdef int here = 13
cdef int there = 42

cdef void point_to_there(int** a):
    a[0] = &there

cdef int *a
a[0] = &here
print a[0]
point_to_there(&a)
print a[0]

будет правильным использованием.В этом вопросе мы устанавливали произвольную точку в памяти на 13, что плохо.

...