I read this: Difference between char a[]="string"; char *p="string";
But Consider below code: (I have hard coded
to read the addresses: Just for trial purpose)
#include <stdio.h>
#define read(x,y) *((y*) x)
int main()
{
const char name[]="Andrew";
printf("Printing name : %p\n",name);
printf("Printing &name : %p\n",&name);
printf("At address 0x22ac39:%c\n",read(0x22ac39,char));
printf("At address 0x22ac3a:%c\n",read(0x22ac3a,char));
printf("At address 0x22ac3b:%c\n",read(0x22ac3b,char));
printf("At address 0x22ac3c:%c\n",read(0x22ac3c,char));
printf("At address 0x22ac3d:%c\n",read(0x22ac3d,char));
const char* add="University Of Glasgow";
printf("Printing add : %p\n",add);
printf("Printing &add : %p\n",&add);
printf("At address 0x402121:%c\n",read(0x402121,char));
printf("At address 0x402122:%c\n",read(0x402122,char));
printf("At address 0x402123:%c\n",read(0x402123,char));
printf("At address 0x402124:%c\n",read(0x402124,char));
printf("At address 0x402125:%c\n",read(0x402125,char));
return 0;
}
The output shows:
$ ./memory.exe
Printing name : 0x22ac39
Printing &name : 0x22ac39
At address 0x22ac39:A
At address 0x22ac3a:n
At address 0x22ac3b:d
At address 0x22ac3c:r
At address 0x22ac3d:e
Printing add : 0x402121
Printing &add : 0x22ac34
At address 0x402121:U
At address 0x402122:n
At address 0x402123:i
At address 0x402124:v
At address 0x402125:e
Rest All fine but not able to grasp how below two statements, showing the same content?
printf("Printing name : %p\n",name);
printf("Printing &name : %p\n",&name);