当我在 Xcode 的 64 位 Intel 中编译下面的代码时,我得到了这个输出。
#include<stdio.h>
#include<limits.h>
int main(void)
{
/* declare some integer variables */
long a = LONG_MAX;
long b = 2L;
long c = 3L;
/* declare some floating-point variables */
double d = 4.0;
double e = 5.0;
double f = 6.0;
printf("A variable of type long occupies %d bytes.", sizeof(long));
printf("\nHere are the addresses of some variables of type long:");
printf("\nThe address of a is: %p The address of b is: %p", &a, &b);
printf("\nThe address of c is: %p", &c);
printf("\nThe address of a-b is: %ld\nvalue of a is %ld\nValue of b is %ld\nsize of pointer %ld ", (&a-&c),a,b,sizeof(&a));
printf("\n\nA variable of type double occupies %d bytes.", sizeof(double));
printf("\nHere are the addresses of some variables of type double:");
printf("\nThe address of d is: %p The address of e is: %p", &d, &e);
printf("\nThe address of f is: %p\n", &f);
printf("\n size long - %d", sizeof(a));
return 0;
}
long 类型的变量占用 8 个字节。 以下是一些 long 类型变量的地址: a的地址是:0x7fff5fbff880 b的地址为:0x7fff5fbff878 c的地址是:0x7fff5fbff870 ab的地址是:2 a 的值为 9223372036854775807 b 的值为 2 指针大小 8 double 类型的变量占用 8 个字节。 以下是一些 double 类型变量的地址: d的地址是:0x7fff5fbff868 e的地址是:0x7fff5fbff860 f的地址是:0x7fff5fbff858 尺寸长 - 8
对我来说奇怪的是,地址之间的差异a
只有b
2。我希望它是 8,这将匹配很长的字节数。有谁知道为什么会这样?
我在减去 &a-&c 的代码中确实有错字,但这确实与我的问题无关。我的问题是为什么从变量 a 的地址到变量 b 的地址只有 2 个字节的差异,而 long 是 8 个字节长并且我希望看到 8 个差异?