下面给出的是代码。谁能解释一下它背后的逻辑。
#include<stdio.h>
int main()
{
int *i,*j;
i=(int *)60;
j=(int *)20;
printf("%d",i-j);
return 0;
}
您正在分配 60 和 20 的指针值。
由于int*
(指针),在您的平台上是 4 个字节(32 位),并且 j 和 i 之间有 40 个字节的差异,i-j
返回40 / sizeof(int)
,打印10
.
这是因为指针算法。当您向指针添加一些值时,结果将取决于指针的类型。在您的系统上,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
你系统上的大小)。
两个类型指针之间的距离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。
i 和 j 是指向int
s 的指针。在 4 字节机器上,int
s 是 4 字节长,指针 2 到连续 s 之间的差int
将是 4。60 - 20 / 4
is - err - 10
好吧,我想您得到了答案,但这是标题;您必须考虑变量的大小,这意味着在这种情况下 sizeof(int)==4。所以 40 个字节等于 10 个 int(在您的操作系统中)。
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 个字节。