Question: I know you can pass an array by reference by doing:

```
void func(T (&arr)[4])
{
    std::cout<<sizeof(arr)/sizeof(arr[0]);
}

```

and you can pass an array of function pointers like:

```
void func(void(**run)(int i))
{
    run[0](100);
}

void func(void(*run[4])(int i))
{
    run[0](100);
}

```

But you can't use sizeof on the function pointers case(s) to get the size of the parameter array.

What is the correct syntax for an array of function pointer by reference?

Answer: 
The syntax would (oddly) be:

```c++
void func(void (*(&run)[4])(int))

```

The extra parenthesis is to disambiguate the declaration from an array of references - which is illegal in C++.
@0x499602D2's answer is correct, but you might be better off spending a couple of lines defining the types you need:

```
typedef void (*Func)(int i);
typedef Func FuncArr[4];

void callFuncs(FuncArr& funcs) {
   ...
}

```

IMHO, it's a little bit more readable.