To offer a broader explanation, an array name is generally the same thing as a pointer to the first element of the array; ie:

mydata == &mydata[0]

Therefore, your function call should have been either

Code:

processFromStruct1(&mydata[0]);

or

Code:

processFromStruct1(mydata);

with the latter being preferred. As you can see, writing &mydata (as opposed to &mydata[0]) added an extra level of indirection which doesn't even make any sense.

The equivalence of array names and pointers can only be taken so far. The main difference is that you cannot change where an array name points to. So while you can assign a different address to a pointer, you cannot do the same to an array name. And while you can increment or decrement a pointer, you cannot do the same to an array name. Other than that (unless I forgot one), you can safely treat an array name as a pointer and vice versa (eg, use array indexing notation on a pointer).