我创建了一个简单的程序:
每次运行程序时,它都会打印指针p1、p2和p3的内存地址,有趣的是这些值之间的差异为12。我想知道背后的原因。为什么地址会相差12?
注意:每次执行程序都会发生这种情况。
输出:
我在许多类型的变量中测试了同样的程序,得到的结果是...
当变量为char类型时。
当变量为long类型时。
当我声明int数组时,每个数组的大小为1。
当第二个声明的数组大小为2时,它会得到额外的4字节偏移量。
#include <stdio.h>
int main()
{
int s1;
int s2;
int s3;
int *p1, *p2, *p3;
p1 = &s1;
p2 = &s2;
p3 = &s3;
printf("%d\n%d\n%d", p1, p2, p3);
}
每次运行程序时,它都会打印指针p1、p2和p3的内存地址,有趣的是这些值之间的差异为12。我想知道背后的原因。为什么地址会相差12?
注意:每次执行程序都会发生这种情况。
输出:
我在许多类型的变量中测试了同样的程序,得到的结果是...
当变量为char类型时。
当变量为long类型时。
当我声明int数组时,每个数组的大小为1。
当第二个声明的数组大小为2时,它会得到额外的4字节偏移量。
std::cout
?而且为什么不使用有效的main
签名呢? - chrisint
和int*
的值,而你在64位平台上。每个int
占用4个字节,每个int*
占用8个字节。但正如人们所说,看一下反汇编代码就知道了。 - paddymain
函数签名以及void main
的问题的内容。 - Iskar Jarak