c - Pointers pre/post increment -
can please explain following code completely?
#include<stdio.h> #include<stdlib.h> int main() { int *a, *s, i; = s = (int *) malloc(4 * sizeof(int)); (i = 0; < 4; i++) { *(a + i) = * 10; printf(" %d ", *(a + i)); } printf("\n"); printf("%d\n", *s++); printf("%d\n", (*s)++); printf("%d\n", *s); printf("%d\n", *++s); printf("%d\n", ++*s); printf("\n"); printf("%d\n", *a++); printf("%d\n", (*a)++); printf("%d\n", *a); printf("%d\n", *++a); printf("%d\n", ++*a); return 0; }
output:
0 10 20 30 0 10 11 20 21 0 11 12 21 22
1) how pointer 's' printing values, *(a+i)
been assigned values in loop?
2) value go , stored when *(a+i)
assigned?
3) what's difference between *s++
, (*s)++
, *++s
, ++*s
?
4) why values incremented 1 when print pointer similar s?
thanks in advance ! :)
1 , 2) pointer points (or can address of) memory location. since assign a = s = (int*) malloc(4 * sizeof(int));
, a
, s
both has same address, or points same memory location. if changes content @ memory location (e.g. in code, assigning numbers allocated memory), long have right address (both a
, s
points same location), can see content changes.
a rough analogy that, ask house (malloc
), , gives address of house (a
). decide house ugly, , want re-paint (assign value: *(a + i) = + 10
), other people told address (s
) see house has been repainted.
3)
*s++
means access content @ current address, , later increments pointer (address).
reflect code, accesses first element, address point second element.
(*s)++
means access content @ current address, , later increments content @ current address.
reflect code, gets content of second element before incrementing it. next print statement shows content of second element having been incremented.
*++s
means increments current address, , access content @ incremented address.
reflect code, gets content of third element.
++*s
means increments content @ current address, , access incremented content.
reflect code, gets incremented content of third element.
4) explained in earlier part, if modify content via 1 pointer, see if have same pointer (address). modifying content of memory addresses (as explained in 3), may see effect of modification when repeat process.
Comments
Post a Comment