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

Discussion in 'Python' started by JW, Jul 11, 2003.

  1. JW

    JW Guest

    Hi,


    Below is a description of what I would like to do. Would someone tell
    me if it is possible and if so, how?

    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?
    I know how to create a PyTuple_New and change each member of the C
    array into a PyObject, then add all thos PyObjects to the Tuple,
    before passing that PyTyple from C to Python, but this seems slow.

    Thanks in advance for your help.
    JW, Jul 11, 2003
    #1
    1. Advertising

  2. JW

    David Jeske Guest

    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/ +
    David Jeske, Jul 12, 2003
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. J W
    Replies:
    0
    Views:
    382
  2. entitledX
    Replies:
    4
    Views:
    503
    Old Wolf
    Jan 12, 2006
  3. jimjim
    Replies:
    16
    Views:
    822
    Jordan Abel
    Mar 28, 2006
  4. PeterOut

    Passing a 2D array as a pointer to a pointer

    PeterOut, Aug 27, 2008, in forum: C Programming
    Replies:
    3
    Views:
    296
    Nick Keighley
    Aug 28, 2008
  5. , India

    pointer to an array vs pointer to pointer

    , India, Sep 20, 2011, in forum: C Programming
    Replies:
    5
    Views:
    439
    James Kuyper
    Sep 23, 2011
Loading...

Share This Page