I received help on another topic and this included the for loop in the first function below. I tried using the same technique for unsigned long in the second function below.
The comments in the code are mine, just trying to understand what is going on. Also I'm a hardware guy, no formal programming education.
The below print function prints three values not 2. This seems to imply this code syntax is meant for character arrays and is expected a null character at the end? Will this for loop style work with long type as well as char types?
How can this be fixed.
// this is the code example followed to try coding the print() function below
void copyArrayAtoO(char a[], char out[]) {
char *q; // char input arrays pointer
char *p = out; // assign output array pointer
// assign char a[] to q, *q ptr for char a[], inc char a[] ptr, inc out ptr
for (q = a; *q; q++, p++)
*p = *q;
*p = '\0'; // append null character
}
// code that needs help
unsigned long A[] = { 655390, 1310780 };
// call like this
print(A);
void print( unsigned long A[] ) {
unsigned long *a; // pointer
for (a = A; *a; a++) {
Serial.println(*a);
}
}
You guessed right. The only way the first function can know the length of the array is that the for loop tests for a terminating null. You have to pass the length of the array to the second function.
To trick it into working just for a demo:
unsigned long A[] = { 655390, 1310780, 0 };
... but such a print function couldn't print zeroes.
Your program stopped printing for the same reason the example you worked from.
It printed until it was pointing to some memory that appeared to be 0 when interpreted as a long integer.
So you could do the same thing, put a zero at the end of the kist of values you want to print.
In the case of characters, no one wants or needs to print a character whose value is zero, that’s why it can enjoy special use as a terminator.
You might miss not being able to use 0 when dealing with integers, however.
Sometimes another special value is named, like 9999 as a value never expected to be needed, therefor usable as a flag to mean something different, in this case like you have reached the end of “real” values in a list.