Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   please tell me how it is getting its output.. (http://www.go4expert.com/forums/tell-getting-output-t26533/)

Ankur Kamboj 19Aug2011 21:49

please tell me how it is getting its output..
 
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...:confused:

shabbir 19Aug2011 22:14

Re: please tell me how it is getting its output..
 
Garbage value because it is actually subtracting the value stored at location 200 and 100 and not 200 and 100.

xpi0t0s 20Aug2011 12:27

Re: please tell me how it is getting its output..
 
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.

poornaMoksha 10Sep2011 00:09

Re: please tell me how it is getting its output..
 
Yup, I agree with xpi0t0s
On My Linux box, the output was 25 since on my machine int captures 4 bytes

sura 29Oct2011 00:06

Re: please tell me how it is getting its output..
 
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 ....................


All times are GMT +5.5. The time now is 17:34.