Passing pointer to array from C to Python..and modifying same array in python?

David Jeske jeske at chat.net
Sat Jul 12 18:45:59 EDT 2003


On Fri, Jul 11, 2003 at 02:06:10PM -0700, JW wrote:
> I have an array (presumably 'large') that is mallocced in a C
> function and its values are initialized in that same function.  I
> would like to pass just the pointer to the beginning of the array
> from this C function to a Pyton function.  Then the python method
> can individually access and MODIFY individual members of the array.
> After the call to the python method, the C function will see any
> changes to the array.

> Can this be done?

Of course this can be done, and there are a number of ways to do
it. Based on your implication that there are many more values put in
the array by the C code than will be accessed (or changed) by the
Python code, this method might make sense:

1) have the C function construct a new python object (i.e. the "wrapper")

2) put the real pointer to the C array into the wrapper as instance data

3) register two methods for the object "get()" and "set()", impelemented
   in C as Python exported functions.

   The get method should take self and the array index as paramaters and
   return the values in that slot of the array

   The set method should take self, an index, and the values as paramaters
   and it should modify the real "C-version" of the array.

4) when you execute your python function, it will be given this
   "wrapper" object as a paramater. It can then call into the methods in 
   the wrapper object to access and change the C-array "in-place" without
   converting it at all. Each new value which is set into the array
   is converted on the fly.

5) If you like, you can convert get() and set() to __get__() and __set__
   so you can use array access syntax to access the array from python.


-- 
David Jeske (N9LCA) + http://www.chat.net/~jeske/ + jeske at chat.net





More information about the Python-list mailing list