6.Python与C之数组与指针

  1. 数组

    c_int*2建立的是一个长度为2的数组类型,即python

    typedef typedef struct{int a[2];} Type;数组

    每一次调用就是调用构造函数进行构造对象。函数

  2. 指针

    三种使用状况。翻译

    1. 做为入参传递给C语言函数,这种只须要经过byref就好了。
      from ctypes import *
      	char_array_5 = c_char * 5
      	arg_char = char_array_5()
      	arg_char.value = b"del"
      	cdll.msvcrt.printf(b"%s\n",byref(arg_char))

      翻译过来就是

      #include<ctypes>
      	typedef struct{char value[5];}  char_array_5 ;
      	char_array_5 arg_char;
      	strcpy(arg_char.value,"del");
      	printf("%s\n",(char*)&arg_char);
      执行
      #include<stdio.h>
      	#include<string.h>
      	int main()
      	{
      		typedef struct{char value[5];}  char_array_5 ;
      		char_array_5 arg_char;
      		strcpy(arg_char.value,"del");
      		printf("%s\n",(char*)&arg_char);
      		return 0;
      	}
    2. pointer做为有实体对象的指针,和byref相似,不过这种一般用于操做的,非匿名对象。
      from ctypes import *
      	char_array_5 = c_char * 5
      	arg_char = char_array_5()
      	arg_char.value = b"del"
      	cdll.msvcrt.printf(b"%s\n",pointer(arg_char))
    3. POINTER稍微复杂点。
      from ctypes import *
      	charptr = POINTER(c_char)
      	arg_char = charptr((c_char*5)(*b'abac'))
      	arg_char[0] = b's'
      	print(arg_char.contents,type(arg_char.contents))
      	cdll.msvcrt.printf(b"%s\n",arg_char)
      #include<ctypes>
      	typedef char *charptr;
      	charptr arg_char = new char[5]('a','b','a','c');
      	arg_char[0] = 's';
      	printf("%s\n",arg_char)
相关文章
相关标签/搜索