python函数指针 python ctypes 指针( 二 )


void changeA(void * pa)
{
pa=malloc(sizeof(int));
*(int *)pa=100;
free(pa);
}
精通C的你一眼就看出这个函数永远也改变不了它外面的世界 。
也就是说虽然传递的是地址,但像changeA这样的函数改变不了实参的值 。
也许会感到困扰?不,我已经在Matlab中习惯了 。
一个最典型的例子就是Matlab中删除结构体成员的rmfield函数(参见《Matlab笔记三则》),
(Matlab版本7.0.1)
如果想删除结构体patient的name成员,用
rmfield(patient, 'name');
是永远达不到目的的(就像试图用双手抓住自己的领子,把自己提到空中)python函数指针;
迷途知返的做法是:
patient = rmfield(patient, 'name');
python 里有指针的东西吗没有 。由于对象机制(对象三种属性: 实体 , 类型和值)的引入 , Python、JAVA、C#等动态确定变量类型的面向对象语言的使用可以非常灵活 。比如我们可以用自省方法来查看内存中以对象形式存在的其它模块和函数,获取它们的信息 , 并对它们进行 操作 。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数 。也就是说除了C/C++ , 其他语言都不用指针,改为“引用” 。
python有没有指针如果您曾经使用过C或C ++等低级语言python函数指针,那么您可能已经听说过指针 。指针允许您在部分代码中创建高效率 。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此 。那么在Python中有指针的存在吗python函数指针?
指针广泛用于C和C ++ 。本质上,它们是保存另一个变量的内存地址的变量 。有关指针的更新 , 可以考虑在C指针上查看此概述 。
为什么Python没有指针?
实际上指针为何不存在的原因现在还不知道,也许指针违背python函数指针了Python的禅宗 。指针鼓励隐含的变化而不是明确的变化 。但通常情况下 , 它们很复杂而不是很简单,特别是对于初学者 。更糟糕的是,当python函数指针他们用指针指向自己的方法,或做一些非常危险的事情 , 比如从你无法获取的的一些变量中读取数据 。
Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度 。因此,Python中的指针并没有多大意义 。但是在有些情况下 , Python会为您提供使用指针的一些好处 。
想要理解Python中的指针,需要理解Python实现指针功能的具体细节 。简单来说,需要了解这些知识点:
不可变对象和可变对象【Python中的对象】
Python变量/名称【Python中的变量】
【在Python中模拟实现指针】
python ctypes 怎么处理函数返回的一般指针test.c(动态库源代码)
[cpp] view plain copy
// 编译生成动态库: gcc -g -fPIC -shared -o libtest.so test.c
#include stdio.h
#include string.h
#include stdlib.h
typedef struct StructPointerTest
{
char name[20];
int age;
}StructPointerTest, *StructPointer;
StructPointer test()// 返回结构体指针
{
StructPointer p = (StructPointer)malloc(sizeof(StructPointerTest));
strcpy(p-name, "Joe");
p-age = 20;
return p;
}
编译:gcc -g -fPIC -shared -o libtest.so test.c
call.py(python调用C语言生成的动态库):
[python] view plain copy
#!/bin/env python
# coding=UTF-8
from ctypes import *
#python中结构体定义
【python函数指针 python ctypes 指针】class StructPointer(Structure):

推荐阅读