python有没有指针

Python013

python有没有指针,第1张

如果您曾经使用过C或C ++等低级语言,那么您可能已经听说过指针。指针允许您在部分代码中创建高效率。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此。那么在Python中有指针的存在吗?

指针广泛用于C和C ++。本质上,它们是保存另一个变量的内存地址的变量。有关指针的更新,可以考虑在C指针上查看此概述。

为什么Python没有指针?

实际上指针为何不存在的原因现在还不知道,也许指针违背了Python的禅宗。指针鼓励隐含的变化而不是明确的变化。但通常情况下,它们很复杂而不是很简单,特别是对于初学者。更糟糕的是,当他们用指针指向自己的方法,或做一些非常危险的事情,比如从你无法获取的的一些变量中读取数据。

Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度。因此,Python中的指针并没有多大意义。但是在有些情况下,Python会为您提供使用指针的一些好处。

想要理解Python中的指针,需要理解Python实现指针功能的具体细节。简单来说,需要了解这些知识点:

不可变对象和可变对象【Python中的对象】

Python变量/名称【Python中的变量】

【在Python中模拟实现指针】

这玩意太难排版,凑合吧

c 的调用方式如下

void test(char**p, int* len)

char* p = malloc(0x1000)

int len = 0x1000

test(&p, &len)

DebugPrint("size is %d ", len)

DumpHex(p, len)

python 呼叫test

func = CDLL('path').test

functype = CFUNCTYPE(c_void, c_void_p, c_void_p)

func = functype(CDLL('path').test)

data = create_string_buffer(0x1000)

len = c_uint64(0x1000)

func(byref(c_int64(addressof(data))), byref(len))  # 如果32位机器的话data 的地址转化为c_int32

data = data[:len.value] # 将字节码重新组装。 data 本身存储的是c_array_0x1000 . 不是python 的bytes类型。

ctypes pyobjc 这种库自身做了一个桥接。 很多虽然python能访问的类型,并不是python原生的类型。

需要很细心的转化为原生类型后,就大胆的使用吧。