Getting a function to return an array

Discussion in 'C Programming' started by Andrew Gentile, Jan 1, 2007.

  1. Hello,
    I am trying to write a function which takes several floats as
    inputs, then returns 1x6 array of floats. I normally program in
    Matlab, and I am often confused by C. It seems that this should be an
    easy task, but I can't seem to get it done. Can someone please
    include a brief snippet of code which demonstrates how to get a
    function to accept 2 floats as inputs, and returns an array of 6
    floats.
    Thanks.

    Andrew
     
    Andrew Gentile, Jan 1, 2007
    #1
    1. Advertising

  2. Andrew Gentile

    jacob navia Guest

    Andrew Gentile a écrit :
    > Hello,
    > I am trying to write a function which takes several floats as
    > inputs, then returns 1x6 array of floats. I normally program in
    > Matlab, and I am often confused by C. It seems that this should be an
    > easy task, but I can't seem to get it done. Can someone please
    > include a brief snippet of code which demonstrates how to get a
    > function to accept 2 floats as inputs, and returns an array of 6
    > floats.
    > Thanks.
    >
    > Andrew
    >


    You can't return arrays in C. This is a design decision that goes back
    to the first versions of the language.

    A work around is this:

    typedef struct tagDataStruct {
    double data[8192];
    } DataStruct;

    DataStruct Function(double inputdata)
    {
    DataStruct result;

    // calculate the result .....

    return result;
    }
     
    jacob navia, Jan 1, 2007
    #2
    1. Advertising

  3. "Andrew Gentile" <> wrote in message
    news:...
    > Hello,
    > I am trying to write a function which takes several floats as
    > inputs, then returns 1x6 array of floats. I normally program in
    > Matlab, and I am often confused by C. It seems that this should be an
    > easy task, but I can't seem to get it done. Can someone please
    > include a brief snippet of code which demonstrates how to get a
    > function to accept 2 floats as inputs, and returns an array of 6
    > floats.


    This is an interface design question, and there are a couple of ways of
    doing it.

    I hesitate to give this advice, as 'C' gives you more than enough rope to
    hang yourself.

    METHOD 1--ALLOCATE THE MEMORY IN THE CALLER

    void caller(void)
    {
    float inputs[2];
    float outputs[6];

    .... assign the inputs, inputs[0] and inputs [1].

    callee(inputs, outputs);

    .... Here the outputs are assigned by the called function.
    }

    void callee(float *inputs, float *outputs)
    {
    Here you may use inputs[0] and inputs[1] (but no more).

    Here you may assign outputs[0] through outputs[5] (but no more).
    }

    On second thought, I won't describe alternate methods.

    In 'C', the brackets [] are an operator. Although the compiler may make
    some optimizations, the brackets just say "index into this array, pointed
    to, by a number of elements".

    There really is no notion in 'C' of going beyond the limits of the array.
    That has to be controlled carefully. Allocation information is not packaged
    with the array.

    In the example, above, addressing outputs[6] (beyond the end of the array)
    is very likely to be a run-time disaster.

    There are various "safer" ways to handle the above, but the above comes down
    to the fact that the caller and callee have to have agreement about what is
    being passed. They both need to agree that inputs is only 2 floats big and
    outputs is only 6 floats big. The "unsafe" way to have that agreement is
    implicit ... with the information not explicitly passed. The above code is
    unsafe, but it should work for you as long as you don't go beyond the array
    boundaries.

    Also, inputs and outputs are passed with the "&" operator because 'C' has
    the convention that arrays and pointers are the same thing. For other data
    types, a & would be required.

    Please post back with any specific questions.

    Dave.
     
    David T. Ashley, Jan 2, 2007
    #3
  4. Andrew Gentile wrote:

    > I am trying to write a function which takes several floats as inputs,
    > then returns 1x6 array of floats. I normally program in Matlab
    > and I am often confused by C. It seems that
    > this should be an easy task, but I can't seem to get it done.
    > Can someone please include a brief snippet of code
    > which demonstrates how to get a function to accept 2 floats as inputs
    > and returns an array of 6 floats.


    You can't return an array in C
    but you can return a pointer to the first element of the array.
    But it seems that you are really more interested
    in returning a vector (or matrix).
    Take a look at The ANSI C Numerical Class Library

    http://www.netwood.net/~edwin/svmtl/

    ----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==----
    http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
    ----= East and West-Coast Server Farms - Total Privacy via Encryption =----
     
    E. Robert Tisdale, Jan 2, 2007
    #4
    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. Seong-Kook Shin
    Replies:
    1
    Views:
    520
    Richard Bos
    Jun 18, 2004
  2. Greenhorn
    Replies:
    15
    Views:
    881
    Keith Thompson
    Mar 6, 2005
  3. Replies:
    3
    Views:
    942
    Frederick Gotham
    Nov 30, 2006
  4. Replies:
    4
    Views:
    566
    James Kanze
    Jul 22, 2008
  5. Davy
    Replies:
    9
    Views:
    1,623
Loading...

Share This Page