When you declare void myFunction1(long *myArray[]), I suspect you are making two mistakes.
One is that I think you intended this to be a pointer to the array. However, the brackets, [], bind more tightly to the identifier, myArray, than the asterisk, *, does. So the parameter is long *(myArray[]), which is an array of pointers to long, but I think you intended a pointer to an array of long, which would be long (*myArray)[].
You actually could declare the function with this parameter, pass it a pointer to the array, as with myFunction1(&myArray), and use the pointer inside the function, as with (*myArray)[0] = 1;.
However, C gives us a shortcut, and not using that is the second mistake. If you declare the parameter as long myArray[], then it looks like an array but it is actually converted to long *myArray, which is a pointer to long. Then you can pass the array as myFunction1(myArray). Although myArray is an array, C converts it to a pointer to the first element. So the argument myArray will match the parameter long myArray[]. Then, inside the function, you can use the pointer with myArray[0] = 1;.
The shortcut results in shorter notation and is generally considered to be more natural notation, so it is preferred.
long myArray[], and assign value without the asterisk.