Erm... both array and buf are the same type of variable, and since they're arrays, they're automatically cast to char* when you type the names, so the first strcpy is correct, and the second is not correct. But from what I understand, it's legal in C (which is just outright silly).
buf == char* and &buf == char**.
strcpy takes a char* and const char*.
Code:
1. array (buf)
or use,
2. &array (&buf)
or use
3. &array[0] (&buf[0])
This is just another stupid example.
array is not a function, it's an array - so array(buf) is not valid!
But even array[buf] is really stupid since it would most likely give an access violation (not to mention you're converting char* to int, which is legal in C, but really stupid).
Oh and,
&array[0] (&buf[0])
Is the same as
array(buf)