What's the most "proper" way to pass a dynamically sized array to another function?

bool *used = new bool[length]();

I've come up with a few ways that compile but I'm not too sure on what the correct way is.

E.g.

Would these pass by value?

static void test(bool arr[])

static void test(bool *arr)

Would this one pass by reference?

static void test(bool *&arr)

Thanks

Edit
Report