Velocity Reviews > Passing a 2D array as a pointer to a pointer

# Passing a 2D array as a pointer to a pointer

PeterOut
Guest
Posts: n/a

 08-27-2008
Say I have a function like this.

int Func(float **fppArg);

and I have a variable defined thus.

float faa2DArray[3][3];

How would I pass faa2DArray to Func()?

Peter.

Ben Bacarisse
Guest
Posts: n/a

 08-27-2008
PeterOut <(E-Mail Removed)> writes:

> Say I have a function like this.
>
> int Func(float **fppArg);
>
> and I have a variable defined thus.
>
> float faa2DArray[3][3];
>
> How would I pass faa2DArray to Func()?

You can't, at least not directly. You can write:

float *tmp[] = { faa2DArray[0], faa2DArray[1], faa2DArray[2] };
Func(tmp);

or even:

Func((float *[]){faa2DArray[0], faa2DArray[1], faa2DArray[2]});

if you don't mind straying into C99. This is more universal:

float *tmp[3];
tmp[0] = faa2DArray[0];
tmp[1] = faa2DArray[1];
tmp[2] = faa2DArray[2];
Func(tmp);

However, the fact that you need these gymnastics suggests that
something has gone wrong. Can't you start with the right shape of
array in the first place, or change Func to take the array you have?

--
Ben.

Default User
Guest
Posts: n/a

 08-27-2008
PeterOut wrote:

> Say I have a function like this.
>
> int Func(float **fppArg);
>
> and I have a variable defined thus.
>
> float faa2DArray[3][3];
>
> How would I pass faa2DArray to Func()?

You wouldn't. You have to change the declaration of either fppArg or
faa2DArray.

One way would be:

int Func(float fppArg[][3]);

Brian

Nick Keighley
Guest
Posts: n/a

 08-28-2008
On 27 Aug, 23:53, PeterOut <(E-Mail Removed)> wrote:
> Say I have a function like this.
>
> int Func(float **fppArg);
>
> and I have a variable defined thus.
>
> float faa2DArray[3][3];
>
> How would I pass faa2DArray to Func()?

http://c-faq.com/

FAQ 6.18 "My compiler complained when I passed a two-dimensional
array to a function expecting a pointer to a pointer. "

then read all of section 6. Then read the rest of the FAQ.

--
Nick Keighley

"Resistance is futile. Read the C-faq."
-- James Hu (c.l.c.)