Only the first dimension can be unknown when declaring a function, so you have to declare/define the function like this:
void foo(int16_t coordinates[][3])
{
drawPoint(coordinates[0][0], coordinates[1][0]);
drawPoint(coordinates[0][1], coordinates[1][1]);
drawPoint(coordinates[0][2], coordinates[1][2]);
}
Then you can call it like a normal function:
foo(myPoints);
Edit: Your array declaration is not correct, and I missed it too. It should be:
int16_t myPoints[][2] = {
/* List of points */
};
Now you have a proper coordinate-array, and it can be as long as you like.
For the function to know the number of entries, you have to pass it to the function, so the new function declaration will be:
void foo(int16_t coordinates[][2], int number_of_points);
Don't worry about copying, the compiler is smart enough to only pass the pointer to the array, so it will not copy the whole array.