I have what I thought should be a very simple snippet of code to write, though I\'m unable to compile for a reason which I do not understand.
The following simplifie
Instead of taking the address of the array, write
char buffer[9] = "12345678";
char *pBuffer = buffer;
Edit: What does it all mean?
An array of type T of length n is a (contiguous) sequence of n T's in memory.
A pointer is a memory address.
So for example, the following code
char a[5] = "hello";
char *p = "world";
corresponds to the following situation in memory:

In your code, you have created an array
char buffer[9] = "12345678";
in just the same way as the array char a[5] = "hello" was created. You intend to create a pointer char * which points to the first character of the array, just as char *p above points to the first character of the array "world".
When an expression of type "array of type" (here buffer) is used, it always "decays" to a pointer to the first element unless
1. the expression is used as the operand of sizeof (in sizeof(buffer), buffer does not decay to a pointer)
2. the expression is used as the operand of unary & (in &buffer, buffer does not decay to a pointer)
or
3. the expression is a string literal initializer for a character array (in char someBuffer[3] = "ab", the string literal "ab", an array, does not decay to a pointer).
This is laid out in section 6.2.2.1 of the standard:
729 Except when it is the operand of the sizeof operator or the unary & operator, or is a string literal used to initialize an array, an expression that has type “array of type” is converted to an expression with type “pointer to type” that points to the initial element of the array object and is not an lvalue.
As a result, all that you need to do to create a pointer char *pBuffer to the first character in your array is write
char *pBuffer = buffer;