I think the output will be: 556
Since you mentioned in the question that the machine is little-endian, a will be stored in the little-endian form.
a = 300 i.e. 00000001 00101100 will be stored like this -
And assume that the address of each byte is:
Now, since "b" is a char pointer and size of char is 1 byte, b will only point to the first byte of a, i.e b = 100
a = 300; // Stored at 100, 101
char* b = (char*) &a; // b = 100
*++b = 2; // *(++b) = 2
// This means increment 'b' and then assign 2 at *b
// i.e. value at 101 = 2 (00000010)
Now, memory representation of a becomes like this -
i.e. a = 00000010 00101100 => 556
Hope this helps and I'd really appreciate if people point out any mistakes in my answer.