【发布时间】:2017-12-07 05:24:32
【问题描述】:
我有一个简单的程序:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 6;
int* p1 = &a;
int* p2 = &b;
std::cout << p1 << " " << p2 << " ,sizeof(int)=" << sizeof(int) << std::endl;
system("pause");
return 0;
}
它产生以下输出:
00DBF9B8 00DBF9AC ,sizeof(int)=4
但是,00DBF9B8 - 00DBF9AC == С。我无法理解这个结果。
如果我这样修改程序:
#include <iostream>
using namespace std;
int main()
{
static int a = 5;
static int b = 6;
int* p1 = &a;
int* p2 = &b;
std::cout << p1 << " " << p2 << " ,sizeof(int)=" << sizeof(int) << std::endl;
system("pause");
return 0;
}
我得到了正确的结果:
00394000 00394004 ,sizeof(int)=4
【问题讨论】:
-
编译器不需要一个接一个地放置局部变量
-
不能减去不指向同一个数组元素或数组后面第一个字节的指针。
-
@BaummitAugen:没有人在这段代码中做类似的事情。 OP 正在打印地址并手动计算差异。
-
@MatteoItalia 好点,谢谢。
-
你一直在说“正确的行为”,但你没有表现出任何错误的行为,只是错误的假设。
标签: c++ pointers memory visual-studio-2015 memory-layout