Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Understanding C arrays and pointers

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.

like image 320
Denny Avatar asked Dec 14 '14 00:12

Denny


1 Answers

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.

like image 114
Carl Norum Avatar answered Oct 05 '22 03:10

Carl Norum