#include <stdio.h>
#include <string.h>
void main()
{
{
int ar[4] = { 5 , 6 , 7 , 8 };
int *pi = ar; /* ar is an address of the 0th element, set that addr to pi */
int (*pa)[4] = (int (*)[4])ar;
printf(" val %d @ pi %p\n", *pi, pi);
/*
* When you dereference a pointer to an array you get an array.
* An array is an address of the 0th element of the array so you need to
* dereference it again to get the 0th element of it.
*/
printf(" val %d @ pa %p\n", **pa, pa);
}
{
char *pmessage = "hello world"; /* string litral */
char amessage[] = "hello world"; /* array containing hello world */
int i;
printf("pmessage val %s @ addr %p. pmessage pointer is allocated @ %p\n",
pmessage, (void *)pmessage, (void **)&pmessage);
printf("pmessage addr %p: val (being addr) %p\n", &pmessage, pmessage);
for (i = 0; i < 4; i++) {
printf("pmessage addr %p: val %c:%c:%c:%c\n",
pmessage + 4 * i,
*(pmessage + 4 * i)/*or pmessage[0]*/, *(pmessage + 4 * i + 1),
*(pmessage + 4 * i + 2), *(pmessage + 4 * i + 3));
if (i * 4 + 3 >= sizeof(pmessage))
break;
}
printf("amessage %s @ %p\n", amessage, (void *)amessage);
amessage[2] = 'b';
printf("pmessage %s @ %p\n", pmessage, (void *)pmessage);
printf("amessage %s @ %p\n", amessage, (void *)amessage);
strncpy(amessage, "something else", sizeof(amessage));
printf("pmessage %s @ %p\n", pmessage, (void *)pmessage);
printf("amessage %s @ %p\n", amessage, (void *)amessage);
}
return;
}