所以我正在研究一种算法,我想指出一些结构。指向该结构的指针传递了一些。我不理解如何通过将指针的引用传递给函数来更改指针的地址。下面的代码演示了该问题:
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。
但事实并非如此。我有什么误会?
答案 0 :(得分:0)
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
,这很糟糕。