void main()
{
int *p=new int;
cout<<"p: "<<p<<endl;
int *p1=new int;
cout<<"p1:"<<p1<<endl;
//*p=(int)(p-p1);
*pp-p1;
cout<<"两块内存地址差:\n";
cout<<*p<<endl;
system("pause");
}
p: 003A55E0
p1:003A5440
两块内存地址差:
104
请按任意键继续. . .这个数值应该是003A55E0-003A5440=1A0才是,为什么是104??另外,有个提示:警告 1 warning C4244: “=”: 从“__w64 int”转换到“int”,可能丢失数据 34 d:\My Documents\Visual Studio 2005\Projects\class6\class6\class6.cpp 请问怎么办?
因为p是int*,所以减法计算的是“两者地址之差除以sizeof(int)”
int*相减的结果是ptrdiff_t类型的。该类型在64位上是8字节的,赋给int可能会丢失数据,所以会有warning
*pp-p1; 都是这里的问题。自己找原因去
结贴致谢!