当前位置:编程学习 > C/C++ >>

不是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输入
下一个:请问那个数组怎么改大呀

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,