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)
相關文章
相關標籤/搜索