# Passing an Array to a Function

I know this is a trivial question, but I couldn’t find much on this specific problem (or at least I didn’t know what to google…)

The following works great:

`````` long pos[] = {1000, 1000, 1000};
rel(pos);
``````

I want to be able to write that in a single line like this:

``````rel({1000, 1000, 1000});
``````

But that doesn’t compile. My thought was that it was similar to

``````int x = 5;
someFunction(x);
``````

versus

``````someFunction(5);
``````

The function, rel, looks like this:

``````void rel(long relPos[]){
long absPos[3];
absPos[0] = X.currentPosition() + relPos[0];
absPos[1] = Y.currentPosition() + relPos[1];
absPos[2] = Z.currentPosition() + relPos[2];

axes.moveTo(absPos);
axes.runSpeedToPosition();
}
``````

Here are my initial thoughts:

• I didn’t declare a data type (long), so maybe its something with that? Although that example with the int would suggest that this is not necessary.
• The fact that an array just points to the first element’s address and is not actually a datatype in itself might have something to do with it?

C/C++ doesn't support lists, except as a container class. What you have there is an initializer list. Be thankful we have those.

You made a good point - with this:

``````rel({1000, 1000, 1000});
``````

It is not possible for the compiler to determine the data type.

looks like you can pass an defined array variable, not just a pointer to it. But you must specify the array size

``````#include <stdio.h>

#define N  3

struct array_s {
int val [N];
};

struct array_s arr = { 1, 2, 3 };

int arrData [] = { 23, 44, 65 };

void
func2 (
int * a )
{
printf ("%s: %d %d %d\n", __func__, a [0], a [1], a [2]);
}

void
func (
struct array_s  a )
{
printf ("%s: %d %d %d\n", __func__, a.val [0], a.val [1], a.val [2]);
}

int
main ()
{
func (arr);
func2 (arrData);
}
``````

results

``````func: 1 2 3
func2: 23 44 65
func3: 23 44 65
``````

Interesting. I think for this application, I wouldn't want to get into pointers or anything too complicated. I just ended up making my function, rel, accept three individual longs instead of an array with three elements. This is certainly good to know though for future applications!

Thanks everyone!