Question: ```
#include <stdio.h>
int main(void)
{
  char s[] = {'a','b','c','\n','c','\0'};
  char *p;
  p=&s[3];
  printf("%d\t",++*p++);
  printf("%d",*p);
  return 0;
}  

```

output: 11 99  

Please explain the output. Why there is an increment in the address?

Answer: 
The only thing I see that could possibly be confusing is

```
++*p++

```

Postincrement has higher precedence than the dereference operator, so fully parenthesized it looks like

```
++(*(p++))

```

Which postincrements `p`, dereferences the original value of `p` to get a `char`, then preincrements the value of the `char`, and then the new value gets printed by `printf` as an integer.

So both `p` and what `p` is pointing at get incremented.
pointers in C are just integers which represent a memory location. Arrays in C are always in continuous memory blocks. So when you have a pointer which points to the third element of an array, and you add 1 from the pointer, it points at the fourth element.

In case you are confused about `++*p++`: That's because of the different between pre-increment `(++p)` and post-increment `(p++)`. There is an easy moniker for that for people who hate C++: 

> 
> "C++ - change the language, return the old problems".
> 
> 
>