please tell me how it is getting its output..

Light Poster
19Aug2011,21:49   #1
Ankur Kamboj's Avatar
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...
Go4Expert Founder
19Aug2011,22:14   #2
shabbir's Avatar
Garbage value because it is actually subtracting the value stored at location 200 and 100 and not 200 and 100.
Mentor
20Aug2011,12:27   #3
xpi0t0s's Avatar
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.
Ambitious contributor
10Sep2011,00:09   #4
poornaMoksha's Avatar
Yup, I agree with xpi0t0s
On My Linux box, the output was 25 since on my machine int captures 4 bytes
Banned
29Oct2011,00:06   #5
sura's Avatar
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 ....................