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?
aarg
June 25, 2020, 1:33am
#2
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.
gcjr
June 25, 2020, 1:39am
#3
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!