0
static int a[]={10,20,30,40,50}; static int *p[]={a,a+3,a+4,a+1,a+2}; int **ptr=p; ptr++; printf("%d\n%d\n",ptr-p,**ptr)
why the ptr-p =1
6 Answers
+ 3
Nunwa_Tezpur **ptr gives you value 40.
But ptr returns you pointer address or memory location value..
So here ptr - p is pointer's subtraction happening, not its content or values pointed by those. **ptr - *p =>40 - 10.
And ptr is equal to p+1 according to assingnment **ptr=p;
So ptr - p = p+1 - p =1.
Hope this clears.. Else @swim give you more clarity...
+ 2
**ptr = p;
then ptr++ is equal to p+1
then ptr-p = p+1-p =1.
[ Note that, Here ptr, p, are return memory location values.]
**ptr now points to p+1 = a+3 => that is value 40.
+ 1
thanks a lot .u made it crystal
btw is there any way to find that particular element
0
correct me if i am wrong
ptr gives 40 and p gives 10 so no of elements btw ptr-p is 2 i.e 20 and 30
0
pointer subtraction gives the no of elements between the two address location. so ptr gives 40 and p gives 10 so no of elements btw these two are 2 i.e 20 and 30 ~ swim ~
0
So if you subtract cell addresses of p, you will get number of elements between the addresses so in case of p here we get p + 1 - p = 1
p+1--> a+3 and p-->a
are u saying if we subtract the cell address of a+3 and a in pointer p
it will give no of elements btw these two addresses which is one element and which is that one element
~ swim ~