When you enter the function, in this case main()
the stack is increased by the amount needed by the stack frame, in the stack frame there is space for all of the autos (variables declared inside the function) as well other information not relevant here.
So in this case when you write
char array[256]
as the program enters the function the stack will be increased by enough to make room for 256 characters in the array, the value of the characters in the array are undefined, it is possible that this area in memory was previously written to by another function or program who no longer needs it, so we don't know what the value of the rest of the array is.
When you write
char array[256] = {'a'}
it is equivalent to:
char array[256];
array[0] = 'a';
In this case we have not defined what is in the rest of the array
When you do
memset(array, 'a', sizeof(array))
the CPU will need to go through the entire array and initialize each char in the array to 'a', creating a known value for everything in the array at the cost of using a little more CPU.