不是4个字节的地址都可以转成指针来用吗?下面怎么不行呢
#include <iostream>
using namespace std;
int valPart=20;void fun(void* p)
{
//((int*)p) = &valPart;
}
int main()
{
int val = 10;
fun((void*)&val);
(reinterpret_cast<int*>(&val)) = &valPart;
cout<<val<<endl;
return 0;
}
追问:我把Int类型的地址当Int*来用 //int* p = &val;啊//怎么不行啊?
不是4个字节就是指针吗引用可以修改值?引用怎么写啊?不引用也行啊
void fun(void* p)
{
(*(int*)p) = 20;
}p原来是10,改成20了,杂不是修改p本身?装酷而已
答案:(reinterpret_cast<int*>(&val)) = &valPart;
经过转换的指针是右值,不能赋值的。就好像
double a;
(int)a = 12;
这句肯定不行吧
这是一个道理
(何况val本身就是个固定地址)
如果你是想要给这个指针指向的地址赋值,那应该是
*(reinterpret_cast<int*>(&val)) = valPart;
另外指针转成void *是不需要显式写出来的(写了当然也没错)
其他:你解释一下你的程序想干嘛吧。 我没看出来你把地址弄的这么酷到底想干啥。
上一个:C++如何检测是否有int输入
下一个:请问那个数组怎么改大呀