please tell me how it is getting its output..

Ankur Kamboj's Avatar, Join Date: Jun 2011
Light Poster
main()
{
int *p,*q,i;
p=(int *)100;
q=(int *)200;
i=q-p;
printf("%d",i);
}
it is getting output 50 in turbo c compiler.I do not know how it is working please reply me...
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Garbage value because it is actually subtracting the value stored at location 200 and 100 and not 200 and 100.
0
xpi0t0s's Avatar, Join Date: Aug 2004
Mentor
No, C doesn't dereference pointers unless you use *, i.e. you would get the difference between the contents if you did
Code:
i = *q - *p;
The reason you don't get 100 is because C takes the size of things pointed to into account. Turbo C is dead ancient so probably ints are 2 bytes, so if you subtract two int* pointers from each other with a difference of 100 bytes you get 50, because you can only store 50 ints in 100 bytes. That's how pointers work. If you want to subtract 100 from 200 and get 100, then use integers.

Do this:
Code:
printf("%d",sizeof(int));
to confirm whether or not ints really are 2 bytes.
0
poornaMoksha's Avatar, Join Date: Jan 2011
Ambitious contributor
Yup, I agree with xpi0t0s
On My Linux box, the output was 25 since on my machine int captures 4 bytes
0
sura's Avatar
Banned
in linux (gcc) the memory for int is 4.............
in turbo c the memory for int is 2............
i want to know which is the standard one declared by ANCI ....................