Can anyone please help me understand the following code:
int d = 4;
printf(&d["Hay!Hello %c\n"], &4["BuddyWorld"]); // Hello (some address in char)
printf(&d["Hay!Hello %c\n"], 4["BuddyWorld"]); // Hello y
printf(&d["Hay!Hello %s\n"], 4["BuddyWorld"]); // Segmentation fault
printf(&d["Hay!Hello %s\n"], &4["BuddyWorld"]); // Hello yWorld
printf("d[Hay!Hello %s\n"], &4["BuddyWorld"]);
/* warning: passing argument 1 of 'printf' makes pointer
from integer without a cast */
What is exactly the d[] or &d[] operator? (d is an integer)
Why does &4["BuddyWorld"] and 4[BuddyWorld] yields to different values? (‘W’ and ‘y’ respectively)
Subscripting in C is weird.
a[b]is turned into*(a + b)(the thing at the address obtained by addingbto the pointera). However, sincea + b == b + a, it works the other way around as well (a[b] == b[a]). That’s all that’s going on. In particular, “HelloWorld” is really a pointer to a character array that stores the characters of the string.