Need a little help understanding what exactly is going on in this code snippet. When I run the program it prints 7.
#include <stdio.h>
int main() {
int a[] = {1,2,3,4,5,6,7,8,9};
int b[] = {1,2,3,4,5,6,7,8,9};
int c = 5;
int *p = a;
printf("--> %d", (c[b])[p]);
return 0;
}
I'm just a little confused when it comes to the (c[b])[p] part in the printf statement. Any help/explanation would be greatly appreciated.
It's a bit weird to be written that way, but the []
operator in C is commutative. That means (c[b])[p]
is the same as p[b[c]]
, which is a lot easier to understand:
p[b[c]] = p[b[5]] = p[6] = a[6] = 7
Doing the same with the original expression will work too, it's just a bit weird to look at in places:
(c[b])[p] = (5[b])[p] = (b[5])[p]) = 6[p] = p[6] = a[6] = 7
The commutativity (if that's a word) of []
is just due to its definition - that is, a[b]
is the same as *(a + b)
, where you can see the order of a
and b
doesn't matter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With