SWIG入门3: C/C++初级特性(二)

2014-11-24 11:06:34 · 作者: · 浏览: 1
r* mode);

3 int fputs(const char*,FILE*);

4 int fclose(FILE*);

我们可以直接将库函数封装起来使用。

01 [GCC 4.4.5] on linux2

02 Type "help", "copyright", "credits" or "license" for more information.

03 >>> import foo

04 >>> foo.fopen("test","w")

05

06 >>> f=foo.fopen("test","w")

07 >>> foo.fputs("1234\n",f)

08 1

09 >>> foo.fclose(f)

10 0

5 数组

PYTHON里没有数组。因此SWIG只能将数组的首地址作为一个指针进行一次封装。也就是说,在PYTHON中,你只能把这个数组当成指针来用。它可以被传递给参数为指针的函数作为参数。也可以被另一个数组进行赋值,实际上赋值进行的就是内存拷贝,而并不会改变指针的地址。可以看下面的例子。
01 //file: ary.c

02 #include

03 int a[5]={1,2,3,4,5};

04 int b[6]={10,20,30,40,50,60};

05

06 void PrintArray(int *a,size_t n)

07 {

08 size_t i=0;

09 printf("{");

10 for(i=0;i

11 {

12 printf("%d,",*a++);

13 }

14 printf("}\n");

15 }

16

17 void pa()

18 {

19 PrintArray(a,sizeof(a)/sizeof(int));

20 }

21

22 void pb()

23 {

24 PrintArray(b,sizeof(b)/sizeof(int));

25 }
01 //file: ary.i

02 %module ary

03 %{

04

05 extern int a[5];

06 extern int b[6];

07

08 extern void pa();

09 extern void pb();

10 %}

11

12 int a[5];

13 int b[6];

14 void pa();

15 void pb();


01 #file: testary.py

02 import ary

03 print "a is:"

04 ary.pa()

05 print str(ary.cvar.a)

06 print "b is:"

07 print str(ary.cvar.b)

08 ary.pb()

09

10 print "\n"

11 ary.cvar.a=ary.cvar.b

12

13 print "After a=b"

14 print "a is:"

15 ary.pa()

16 print str(ary.cvar.a)

17 print "b is:"

18 print str(ary.cvar.b)

19 ary.pb()

运行结果:

view sourceprint 01 a is:

02 {1,2,3,4,5,}

03 _306720b7_p_int

04 b is:

05 _446720b7_p_int

06 {10,20,30,40,50,60,}

07

08

09 After a=b

10 a is: www.2cto.com

11 {10,20,30,40,50,}

12 _306720b7_p_int

13 b is:

14 _446720b7_p_int

15 {10,20,30,40,50,60,}

可以看到,运行a=b并没有改变a指针指向的位置,而只是将b数组的前5个元素拷贝到a指针指向的位置而已。