变量取地址的指针变换后的值和直接强制类型转换的区别
变量取地址的指针转换后的值和直接强制类型转换的区别
------解决方案--------------------
这效果就是引用了,不过同时做了类型转换。
(static_cast<char>(ch)),(char)ch 这个只是对 ch的值,做类型转换,起不到这个作用。
*(char*)(&ch) 同时作用于地址和值,还做了类型转换。
换句话说,*(char*)(&ch)是个左值表达式!
------解决方案--------------------
例子4楼已经给你了,就在被你引用的部分:
static_cast<char>(ch)和(char)ch都是进行了数值上的转换,它们都是右值,不能出现在内建赋值操作符的左边。
#include<iostream>*(char*)(&ch),(static_cast<char>(ch)),(char)ch这三个有什么区别吗,还是完全等价,求解释
using namespace std;
int main(void)
{
int ch;
ch=getchar();
cout<<ch<<endl;
cout<<*(char*)(&ch)<<endl;
cout<<(static_cast<char>(ch))<<endl;
cout<<(char)ch<<endl;
return 0;
}
------解决方案--------------------
*(char*)(&ch);
//相当于
char * tp=&ch;
char & t =*tp;
这效果就是引用了,不过同时做了类型转换。
(static_cast<char>(ch)),(char)ch 这个只是对 ch的值,做类型转换,起不到这个作用。
*(char*)(&ch) 同时作用于地址和值,还做了类型转换。
换句话说,*(char*)(&ch)是个左值表达式!
*(char*)(&ch)='a',; //没问题
char ca =*(char*)(&ch); //没问题,左值可以作为右值使用。
(static_cast<char>(ch)) ='a' ;//不可以,(static_cast<char>(ch)),是个右值表达式。
(char)ch ='a' ; // 不可以,(char)ch ,一样是右值表达式。
------解决方案--------------------
例子4楼已经给你了,就在被你引用的部分:
static_cast<char>(ch)和(char)ch都是进行了数值上的转换,它们都是右值,不能出现在内建赋值操作符的左边。