Actually if I can add to Timothy's answer, the char (*ptr)[12] = &string;
type of pointer is fairly unusual as it is a pointer to an array of particular type and size.
Let's see what happens when we print its address before and after we've incremented it by one:
char string[] = "some string";
char (*ptr)[12] = &string;
printf("Before: %p\n", (void*)(ptr));
printf("After: %p\n", (void*)(ptr+1));
Which prints:
Before: 0xbfec44e0
After: 0xbfec44ec
Notice how in the second case the pointer has been moved 12 blocks of memory. Since the pointer knows the size of the type it points to this applies in the case of an array as well, not just for any plain old type. Which in our case is 12.
There's an indepth explanation of this here, that you migh want to read.