This may be an easy question, and if so im sorry, but i couldn't find out how to do this. I've programmed in python before and hoped that this would work, but it don't.
int myArray1[] = {0, 2, 4, 5, 7, 9, 11};
int myArray2[] = {0, 2, 3, 5, 7, 8, 10};
int myArray3[] = {0, 3, 5, 6, 7, 10};
int newArray[] = myArray2;
I wanted to only have to change one place in my code, which of the first three arrays i want my new array to take values from. Do anyone have any suggestions on how to do this?
1 Answer 1
Make newArray
be a pointer to whichever array you wish to work with. For example:
int myArray1[] = {0, 2, 4, 5, 7, 9, 11};
int myArray2[] = {0, 2, 3, 5, 7, 8, 10};
int myArray3[] = {0, 3, 5, 6, 7, 10};
int *newArray = myArray2;
// ... work with selected array, via newArray[] subscripting
Note, you may need to set an array-length variable at the same time as choosing the array.
For example:
int *newArray = myArray2;
int newSize = sizeof(myArray2)/sizeof myArray2[0];
// ... work with selected array
newArray = myArray3;
newSize = sizeof(myArray3)/sizeof myArray3[0];
// ... work with selected array
Alternately, add an array-end marker at the end of each array (eg, a negative number), or more elegantly, make all the arrays the same length.
If you want to make a new copy of the original array, such that modifying the new array won't change the old, use (eg) memcpy()
. For example:
int newArray[7];
...
memcpy(newArray, myArray2, sizeof(myArray2));
Note that memcpy()
's size argument is given in bytes. Also, if you need to declare memcpy()
[I don't recall whether it's automatically declared in the Arduino environment], add #include <string.h>
up front.
-
2But this doesn't copy the contents, it just creates a duplicate reference...CharlieHanson– CharlieHanson2016年01月19日 17:57:29 +00:00Commented Jan 19, 2016 at 17:57
-
@CharlieHanson, that complies with an interpretation of the question consistent with Python's implementation, which produces a new reference to a list. Re Python's copy and deep copy see 8.17. copy — Shallow and deep copy operationsJames Waldby - jwpat7– James Waldby - jwpat72016年01月19日 19:08:47 +00:00Commented Jan 19, 2016 at 19:08
-
Yet it does not comply with the title "Copy content of array".CharlieHanson– CharlieHanson2016年01月19日 19:10:51 +00:00Commented Jan 19, 2016 at 19:10
-
@CharlieHanson, I'd instead say the title does not comply with the content of the post. We can hope OP clarifies. Anyway, will add memcpy noteJames Waldby - jwpat7– James Waldby - jwpat72016年01月19日 19:25:04 +00:00Commented Jan 19, 2016 at 19:25
-
I'd instead say the content of the post does not comply with the title. Sic vita est.CharlieHanson– CharlieHanson2016年01月19日 19:32:44 +00:00Commented Jan 19, 2016 at 19:32
memcpy()
is the C function for copying blocks of memory. If nobody has answered before I get back to a computer I shall write something up, providing you clarify whether you want to copy the contents or not, and whether the arrays are equal fixed length, different fixed lengths, or truly dynamic lengths.newArray
refer to one of the existing arrays. Your wordingwhich of the first three arrays i want my new array to take values from
suggests you merely want to change a reference to one of the existing arrays.