Line 12 is sending the address of the array with an offset of "x". First time through the loop this is the beginning of the array. The second time through "x" is equal to 1, so it is send the address of the array "test" with an offset of 1 char. And so on.
Then in the "message" function the first time it is being sent the start of the array, so it prints from start until it finds a "\0". The second time address sent is the start of the array + 1, so it starts there and prints until it finds a "\0".
Now if you want to only print one character you will need to change the "message function and tell it to print only 1 character. As in std::cout << message[0] << std::endl;
I also had to change line 8 because it was wrong. char test[]{ "test" };
Now "test" is defined as a character array that can hold a string. As you have it you are trying to put a string in a variable that can only hold a pointer, i.e., an address.
FYI in the function "message" the array, or in this case the address, sent to the function degrades to a pointer. That is why your function definition works.