以下是代码。有人可以解释它背后的逻辑。
#include<stdio.h>
int main()
{
int *i,*j;
i=(int *)60;
j=(int *)20;
printf("%d",i-j);
return 0;
}
答案 0 :(得分:9)
您指定的指针值为60和20。
由于int*
(指针),在你的平台上是每个4字节(32位),并且j和i之间有40个字节的差异,i-j
返回40 / sizeof(int)
,打印10
。
答案 1 :(得分:5)
这是因为指针算法。
向指针添加一些值时,结果将取决于指针的类型。在您的系统上,sizeof(int)
似乎等于4个字节,因此当您执行以下操作时:
int *p = 0x1000; //totally dumb value, just for example
printf("%p\n", p + 1);
这将打印0x1004。
所以:(int *)60 - (int *)20 = 10,因为10 * 4(系统上int
的大小)。
答案 2 :(得分:1)
类型T
的两个指针之间的距离几乎计算为(a - b) / sizeof (T)
。如果你说
int* a = 0xdeadbeef;
int* b = a + 1;
然后a和b之间的数字距离将是sizeof(int)(通常为4)但不是1.以防万一
char* x = 0x12345678;
char* y = x + 1;
距离恰好是1。
答案 3 :(得分:0)
i和j是指向int
的指针。在一个4字节的机器上,int
s长4个字节,指针2到连续int
s之间的差值为4. 60 - 20 / 4
是 - err - 10
答案 4 :(得分:0)
嗯,我想你得到了答案,但这里是标题;你必须考虑的大小 变量,这意味着,在这种情况下,sizeof(int)== 4。所以40个字节等于10个int(在你的操作系统中)。
答案 5 :(得分:-1)
60-20 => 40 bytes.
sizeof(int *) = 4 bytes.
i => int *; j=int*
那么,当你做60-20时,你正在做(int * - int *),即60 *中有多少int *?
60-20 = 40
40/4 => 10.
注意:假设sizeof(int *)是4个字节。