Re: a question of style



"questions?" <universal_used@xxxxxxxxxxx> writes:

Artie Gold wrote:
questions? wrote:
I am curious about whether I should do this

say I want to calculate dot product of two matrix(4X4,fixed)
I do two ways

1)
void dot_product(double A[4][4] , double B[4][4], double result[4][4]){
blah blah

}

my results are automatically given back in the matrix result[4][4]

or

2)
double [4][4] dot_product(double A[4][4],double B[4][4]){
double result[4][4];
blah blah

return result;
}

for the second type, result is local variable and will be released
after function call, Will the program have problem to access?

Are there better and neat way to this problem?

Thanks

Well since option 2 is not an option at all (arrays are not a first
class type in C, so an array cannot be a return value), you're left with
option 1.

The other option would be to wrap your array in a struct and return
*that*, but that would depend upon how you plan on using this code...

BTW - explicitly mentioning the first dimension of a passed array is
superfluous; i.e. `double A[][4]' and `double A[4][4]' -- or for that
matter double A[400][4] -- mean the same thing.

I see, I see.
but Do you have the same problem?

Say you locally define a structure which has the array you want to
return.
when you return that, you are pointing to a local variable which will
be released?

Only if you return a /pointer/ to the struct. That's not what he's
recommending. He's saying, if you want, you can return the struct
itself. And he doesn't mean locally define the structure: it will have
to have a filescope definition, in order to declare it as the
function's return type.

Returning a struct involves an implicit copy of your local value
into a value that gets passed back to the caller as the return value.

-Micah
.



Relevant Pages

  • Re: a question of style
    ... The other option would be to wrap your array in a struct and return ... Only if you returned a pointer. ...
    (comp.lang.c)
  • Re: a question of style
    ... The other option would be to wrap your array in a struct and return ... BTW - explicitly mentioning the first dimension of a passed array is ...
    (comp.lang.c)
  • Re: a question of style
    ... for the second type, result is local variable and will be released ... The other option would be to wrap your array in a struct and return ...
    (comp.lang.c)
  • Re: Passing an array of structuresfrom a pointer?
    ... to only declare structs in headers and then define the ... the struct should be declared ... what if you have a simple array like this: ... In the header we would declare? ...
    (microsoft.public.vc.language)
  • Re: Passing an array of structuresfrom a pointer?
    ... I've tried an attempt to do that, and I tried to "clean" the header and main ..c file. ... int LIST_NUMBER; ... typedef struct ddListBox{ ... DDLB_COLL1array! ...
    (microsoft.public.vc.language)