Here is the whole code:
#include <stdio.h> //printf
#include <stdlib.h> //malloc
#include <string.h> //memcpy
void main(void)
{
char* charMem = (char*) malloc(5 * sizeof(char));
memcpy(charMem, "Hello", 5);
char charArr[] = "Hello";
printf(" charMem = %p\n", charMem);
printf("&charMem = %p\n\n", &charMem);
printf(" charArr= %p\n", charArr);
printf("&charArr= %p\n\n", &charArr);
charMem[2] = 'A';
charArr[2] = 'A';
}
And output is:
charMem = 00F8ABB0 //diff
&charMem = 00CFFBB0 //diff
charArr= 00CFFBA0 //same
&charArr= 00CFFBA0 //same
What is happening behind the compiler that leads to these results?