Q:

Meaning of the syntax `const char (&x)[]`

What is the meaning of the syntax const char (&x)[] in C++, is it something like pass pointer by reference to a function call?
Is it the same like const char x[], which defines x as const char*?
And if both are one and the same where should I use const char (&x)[] instead of const char x[]?

A:

const char (&)[] is a reference to a const char array. The expression you showed is declaring x as a one of those.

Is it the same like const char x[]

it's a reference to one of those

... which defines x as const char*

Um, no, let's take a step back.
const char array[5]

declares array as a an array of 5 const chars. It doesn't declare a pointer. However, arrays easily decay to pointers in C++, so for example
void foo(const char *);
// ...
foo(array);

is legal. In fact, arrays decay to pointers so easily, it takes extra care to pass them somewhere without decay:
template <size_t N>
void bar(const char (&x)[N]);

bar(array);

will actually get a reference to the array, and as a bonus, allow bar to deduce the array size.

Note that the only useful difference between a pointer and an array is the number of elements - when I quoted you saying const char x[], I assume there will really be a number between the square brackets. If you omit that, it doesn't have any benefit over a pointer, unless you initialize it:
const char x[] = { 'h', 'e', 'l', 'l', 'o' };

will still allow that call to bar to deduce N=5, even though you never wrote a literal 5 in your code.

It can also be used when you want your function to accept a fixed-length array:
void fun(const char (&x)[50]);

It's also usable with multi-dimensional arrays (but prefer std::vector or std::array when possible).

