从"int*"强制转换为"unsigned int"会丢失精度错误


#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int temp = 300;
cout << "Address of variable temp:  " << (unsigned)&temp;
return 0;
}

main.cpp:在函数"int main(("中:main.cpp:17:57:错误:从"int*"转换为"unsigned int"会丢失精度[-fpermission]cout<lt"变量temp的地址:"<lt;(无符号(&临时雇员

指向int的指针转换为unsigned int

问题是unsigned int太小,无法包含指向int的指针的所有可能值。

你可以试试unsigned long long,它应该足够好

(unsigned long long)&temp;

您可以使用sizeof()检查类型的维度,返回类型/变量的字节数

使用的我的平台(Linux amd64(

std::cout << sizeof(&temp) << std::endl;
std::cout << sizeof(unsigned) << std::endl;

得到8(对于sizeof(&temp)(和4(对于sizeof(long)(。

显然,一个4字节的变量不能代表一个8字节变量的所有可能值。

从不同的平台,你可以获得不同的价值观。

不确定为什么要强制转换它。但如果你想查看temp的内存地址,那么你应该执行&temp

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int temp = 300;
cout << "Address of variable temp:  " << &temp;
return 0;
}

最新更新