输出如何输出为'10'?

时间:2013-07-22 16:56:05

标签: c pointers

以下是代码。有人可以解释它背后的逻辑。

#include<stdio.h>

int main() 
{
    int *i,*j;
    i=(int *)60;
    j=(int *)20;
    printf("%d",i-j);
    return 0;    
}

6 个答案:

答案 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个字节。