重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
没有。由于对象机制(对象三种属性: 实体,类型和值)的引入,Python、JAVA、C#等动态确定变量类型的面向对象语言的使用可以非常灵活。比如我们可以用自省方法来查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行 操作。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。也就是说除了C/C++,其他语言都不用指针,改为“引用”。
西林网站建设公司创新互联,西林网站设计制作,有大型网站制作公司丰富经验。已为西林超过千家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的西林做网站的公司定做!
如果您曾经使用过C或C ++等低级语言,那么您可能已经听说过指针。指针允许您在部分代码中创建高效率。它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此。那么在Python中有指针的存在吗?
指针广泛用于C和C ++。本质上,它们是保存另一个变量的内存地址的变量。有关指针的更新,可以考虑在C指针上查看此概述。
为什么Python没有指针?
实际上指针为何不存在的原因现在还不知道,也许指针违背了Python的禅宗。指针鼓励隐含的变化而不是明确的变化。但通常情况下,它们很复杂而不是很简单,特别是对于初学者。更糟糕的是,当他们用指针指向自己的方法,或做一些非常危险的事情,比如从你无法获取的的一些变量中读取数据。
Python更倾向于尝试从用户那里抽象出内存地址来实现具体细节,所以Python通常关注可用性而不是速度。因此,Python中的指针并没有多大意义。但是在有些情况下,Python会为您提供使用指针的一些好处。
想要理解Python中的指针,需要理解Python实现指针功能的具体细节。简单来说,需要了解这些知识点:
不可变对象和可变对象【Python中的对象】
Python变量/名称【Python中的变量】
【在Python中模拟实现指针】
int* GrabImage();
int GetPixel(int* image, int x, int y);
void SetPixel(int* image, int x, int y, int color);
在封装的代码间传递指针你要确保他们运行在相同的地址空间里,还要保证指针指向的内存的生存期是安全的,否则这种思路就是错误的。实现方法举例如下:
1、定义了C
结构体和函数如下
typedef
struct
NameAge
{
char
name[20];
int
age;
}NameAge
,
*NameAgePointer;
void
test(NameAgePointer
p)
//
接收结构体指针
{
//
do
something
with
p...
}
2、python定义结构体如下
#python中结构体定义
class
PyStruct():
def
__init__(self,
name,
age):
self.name
=
name
self.age
=
age
fred
=
PyStruct("fred",
5)
3、假设把第1步里的test封装成example模块,python导入example(既然你都会swig了,这个过程就不啰嗦了)
import
example
example.test(pointer(fred))
以上是基本思路,因为搭建开发环境和过程比较繁杂,没有验证过,但是应该没有大问题
java源自C++,C++源自C语言....
各有优点呀,不知道要怎么回答了,或许楼主是搞C语言的吧,这些语言都各有特点呀...
首先应该清晰,Java是由C++发展而来的,他保留了c++的大部分内容,类似于c++,
但句法更清晰,规模更小,更易学。他是在对多种程式设计语言进行了深入细致研究的
基础上,据弃了其他语言的不足之处,从根本上解决了c++的固有缺陷,而产生的一种
新的完全方面向对象的语言。
Java和c++的相似之处多于不同之处,但两种语言问几处主要的不同使得Java更容易
学习,并且编程环境更为简单。
因篇幅所限,这里不能完全列出不同之处,仅列出比较显著的差别:
1.指针
Java无指针,并且增添了自动的内存管理功能,从而有效地防
止了c/c++语言中指针操作失误,如指针悬空所造成的系统崩溃。
比w操作返回一对象的引用,类似于c++中的引用;在c++中,
new返回一个对象的指针。在Java中无指针,不会遇见下面这样的
语句:
Mywork?>Mywork();
没有指针的程式无法访问不属于他的内存,消除了在c++
中?些常见的错误,这有利于Java程式的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,他允许多父类派
生一个类。尽管多重继承功能非常强,但使用复杂,而且会引起许多麻
烦,编译程式实现他也非常不容易。Java不支持多重继承,但允许一个
类继承多个接口(界面),实现了c++多重继承的功能,又避免了c++的
许多缺陷。
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中结构体定义
class StructPointer(Structure):
_fields_ = [("name", c_char * 20), ("age", c_int)]
if __name__ == "__main__":
lib = cdll.LoadLibrary("./libtest.so")
lib.test.restype = POINTER(StructPointer)
p = lib.test()
print "%s: %d" %(p.contents.name, p.contents.age)
最后运行结果:
[plain] view plain copy
[zcm@c_py #112]$make clean
rm -f *.o libtest.so
[zcm@c_py #113]$make
gcc -g -fPIC -shared -o libtest.so test.c
[zcm@c_py #114]$./call.py
Joe: 20
[zcm@c_py #115]$