0

下面给出的是代码。谁能解释一下它背后的逻辑。

#include<stdio.h>

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

6 回答 6

9

您正在分配 60 和 20 的指针值。

由于int*(指针),在您的平台上是 4 个字节(32 位),并且 j 和 i 之间有 40 个字节的差异,i-j返回40 / sizeof(int),打印10.

于 2013-07-22T16:58:55.533 回答
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你系统上的大小)。

于 2013-07-22T16:59:37.550 回答
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。

于 2013-07-22T17:00:43.300 回答
0

i 和 j 是指向ints 的指针。在 4 字节机器上,ints 是 4 字节长,指针 2 到连续 s 之间的差int将是 4。60 - 20 / 4is - err - 10

于 2013-07-22T17:00:19.017 回答
0

好吧,我想您得到了答案,但这是标题;您必须考虑变量的大小,这意味着在这种情况下 sizeof(int)==4。所以 40 个字节等于 10 个 int(在您的操作系统中)。

于 2013-07-22T17:33:15.113 回答
-1
60-20 => 40 bytes.
sizeof(int *) = 4 bytes.
i => int *; j=int*

因此,当您执行 60-20 时,您正在执行 (int * - int *) 即 60-20 中有多少 int *?

60-20 = 40 
40/4 => 10.

注意:假设 sizeof(int *) 是 4 个字节。

于 2013-07-22T17:01:28.180 回答