强制类型转换


数字歇后语 2019-10-20 13:44:27 数字歇后语
[摘要]强制类型转换篇(一):强制类型转换1 (int)变量名[强制类型转换]该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使用显示转换,即使用该类型的转换方式否则产生编译错误。该方式对于浮点数

【www.shanpow.com--数字歇后语】

强制类型转换篇(一):强制类型转换


1.(int)变量名[强制类型转换]
    该转换方式主要用于数字类型之间的转换,从int类型向long,float,double,decimal 类型转换可以使用隐式转换,但从long型到int 就需要使用显示转换,即使用该类型的转换方式否则产生编译错误。
  该方式对于浮点数会无条件的舍去,会失去精确度
  对于char类型的到int类型的转换,传回的值是ASCII码
2.int.Parse(string 变量名)
  该方式是将数字内容的字符串转换为int类型,如果字符串的内容为Null ,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出FormatException异常。
  使用该方法只能处理字符串的内容,而且转换后的字符串内容要在int类型的可表示范围之内
3.int.TryParse(string s, out int result)
  该方式也是将数字内容的字符串转换为int类型,但是该方式有比int.Parse 优越的地方,就是它不会出现异常,最后一个参数result是输出值,如果转换成功则输出相应的值,转换失败则输出0。
4. Convert.ToInt32
  该方式不仅可以将字符串类型转换为int,还可以将其他的类型转换为int。变量若为object或string类型,当其值为Nul时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,转换成int时,程序仍会出错。
  该方式对于float类型做四舍五入。
  该方式同强制类型转换一样在处理char类型的时候,返回的都是ASCII码
 
5.
Employee e = o as Employee;if(e!=null){//在if语句中使用e}在这段代码中,CLR首先核实o是否兼容于Employee;如果是,as 将返回对同一个对象的非null引用。如果不兼容,as则会返回Null值。由于as操作符造成CLR只校验一次对象的类型。if语句只检查e是否为null.这个检查速度比校验类型快的多。as操作符的工作方式与强制类型转换一样,只是它永远不会抛出异常。
但是as 不能用于值类型而is却可以。例如如下代码将无法编译
object o = Factory.GetValue( );int i = o as int;

强制类型转换篇(二):指针强制类型转换


当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。
例十四:
1。 float f=12.3;
2。 float *fptr=&f;
3。 int *p;
在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞?是用下面的语句吗?
p=&f;
不对。因为指针p的类型是int*,它指向的类型是int。表达式&f的结果是一
个指针,指针的类型是float*,它指向的类型是float。两者不一致,直接赋值的方法是不行的。至少在我的MSVC++6.0上,对指针的赋值语句要求赋值号两边的类型一致,所指向的类型也一致,其它的编译器上我没试过,大家可以试试。为了实现我们的目的,需要进行"强制类型转换":
p=(int*)&f; 如果有一个指针p,我们需要把它的类型和所指向的类型改为TYEP*和TYPE,
那么语法格式是:
(TYPE*)p;
这样强制类型转换的结果是一个新指针,该新指针的类型是TYPE*,它指向的类型是TYPE,它指向的地址就是原指针指向的地址。而原来的指针p的一切属性都没有被修改。
一个函数如果使用了指针作为形参,那么在函数调用语句的实参和形参的结合过程中,也会发生指针类型的转换。
例十五:
void fun(char*);
int a=125,b;
fun((char*)&a);
...
...
void fun(char*s)
{
char c;
c=*(s+3);*(s+3)=*(s+0);*(s+0)=c;
c=*(s+2);*(s+2)=*(s+1);*(s+1)=c;
}
}
注意这是一个32位程序,故int类型占了四个字节,char类型占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗?在函数调用语句中,实参&a的结果是一个指针,它的类型是int
*,它指向的类型是int。形参这个指针的类型是char*,它指向的类型是char。这样,在实参和形参的结合过程中,我们必须进行一次从int*类型到char*类型的转换。结合这个例子,我们可以这样来想象编译器进行转换的过程:编译器先构造一个临时指针
char*temp,然后执行temp=(char*)&a,最后再把temp的值传递给s。所以最后的结果是:s的类型是char*,它指向的类型是char,它指向的地址就是a的首地址。
我们已经知道,指针的值就是指针指向的地址,在32位程序中,指针的值其实是一个32位整数。那可不可以把一个整数当作指针的值直接赋给指针呢?就象下面的语句:
unsigned int a;
TYPE *ptr;//TYPE是int,char或结构类型等等类型。
...
...
a=20345686;
ptr=20345686;//我们的目的是要使指针ptr指向地址20345686(十进制

ptr=a;//我们的目的是要使指针ptr指向地址20345686(十进制)
编译一下吧。结果发现后面两条语句全是错的。那么我们的目的就不能达到了吗?不,还有办法:
unsigned int a;
TYPE *ptr;//TYPE是int,char或结构类型等等类型。
...
...
a=某个数,这个数必须代表一个合法的地址;
ptr=(TYPE*)a;//呵呵,这就可以了。
严格说来这里的(TYPE*)和指针类型转换中的(TYPE*)还不一样。这里的(TYPE*)的意思是把无符号整数a的值当作一个地址来看待。
上面强调了a的值必须代表一个合法的地址,否则的话,在你使用ptr的时候,就会出现非法操作错误。
想想能不能反过来,把指针指向的地址即指针的值当作一个整数取出来。完全可以。下面的例子演示了把一个指针的值当作一个整数取出来,然后再把这个整数当作一个地址赋给一个指针:
例十六:
int a=123,b;
int *ptr=&a;
char *str;
b=(int)ptr;//把指针ptr的值当作一个整数取出来。
str=(char*)b;//把这个整数的值当作一个地址赋给指针str。
好了,现在我们已经知道了,可以把指针的值当作一个整数取出来,也可以把一个整数值当作地址赋给一个指针。
指针的强制转换是非常危险的
main() 

int *piPointer; 
char cItem; 
cItem="a"; 
piPointer=(int *)&cItem; 
*piPointer=1298; 
}
这种强制转换是正确的,但是是非常危险的
在piPointer=(int *)&cItem;操作中
piPointer是一个整型指针,它需要指向一个整型空间(4字节)。
而cItem只是个字符型的,它只占用1个字节,不满足要求,因此在这里使用强制转换,
这个强制类型转换表示将cItem地址的值赋给指针,使用强制类型转换后,指针就可以操作
以cItem首地址为起始地址的4个字节区域。
在随后操作显示了这种强制转换的危害
*piPointer=1298;
将指针指向的地址赋值为1298而cItem并不能表示这么大的数,于是cItem后的地址内容会被赋值。如果cItem其后的地址是其他变量,那么本操作会改变其他操作的值。这就是c中常见的越界。
具体是修改先申请的变量还是后申请的变量,可以在cItem前后各申请一个4字节的数组,将数组初始化为零,最后查看数组的内容是否被修改

强制类型转换篇(三):java类型转换


    java基本类型的类型转换有三种:
        1、自动类型转换
        2、强制类型转换
        3、表达式类型的自动提升
    (1)自动类型转换
        
    由上图可以看出自动类型转换,其实是从小到大的转换。
    (2)强制类型转换
            如果将上图,反向转换,则需要强制类型转换。并且有可能损失精度。
    (3)表达式类型的自动提升。
            一个算术表达式中可能有多个类型数据进行运算,因此,按照自动类型转换,整个表达式都将转换成最高等级的类型,也就是最大的类型。然后进行运算。 
1
2
3
4  int a=3.4/2.1; 
 /*
 这个语句会报错,因为整个语句中最高等级的为double类型,因此右边将计算出一个double类型,而要将double类型赋值给int类型的a需要进行强制类型转换。如果不强制转换会报错。
 */             
本文出自 “夕下等花逝” 博客,请务必保留此出处http://sunshine2624.blog.51cto.com/3959438/1875607

本文来源:https://www.shanpow.com/xhy/498409/

《强制类型转换.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关阅读
  • 1-49数字对应五行_对应关系你要了解 1-49数字对应五行_对应关系你要了解
  • 遇见你的时候所有星星都落到我头上吉他谱 遇见你的时候所有星星都落到我头上吉他谱
  • 2020抗击疫情防控心得体会范本 2020抗击疫情防控心得体会范本
  • 芒种歌曲简谱 芒种歌曲简谱
  • 陈雪燃《无名之辈》钢琴谱 陈雪燃《无名之辈》钢琴谱
  • 2020抗击疫情先进事迹精选心得体会感悟5篇 2020抗击疫情先进事迹精选心得体会感悟5篇
  • 微信报名接龙数字如何排列对齐传递 微信报名接龙数字如何排列对齐传递
  • 表白1到10的数字含义_数字表白暗语1到10 表白1到10的数字含义_数字表白暗语1到10
为您推荐
  • cvv2是什么意思_cvv2是什么
    cvv2是什么意思_cvv2是什么
    什么是信用卡CVV2码?大家创业网精心为大家整理了cvv2是什么,希望对你有帮助。cvv2是什么CVV2是打印在 Visa Master Card 卡签名区的一个数字。它位于信用卡号后的3位数字。我们
  • 股票神奇数字
    股票神奇数字
    一:[股票神奇数字]股票神奇数字我们今天来继续分享学习笔记哈。。 我有个360图书馆,里边放着自己喜欢的宝藏, 我们可以学习和分享,但是不可以标明为自己原创。。 【股票神奇数字】1、在波段的高位股价尾数出现(6, 7 ,8 ,9,0,)是高抛信号,反过来在波段低位是买入信号。 2、 尾数
  • 我的幸运数字是多少
    我的幸运数字是多少
    我的幸运数字是多少篇(1):幸运数字查询,吉祥数字查询每个人都有自己的幸运数字,你知道你的幸运数字是多少吗,幸运数字也叫吉利数字,吉祥数字,用这个数字对自己八字和运势有利,如幸运数字的车号,楼层号,房号,手机号,幸运数字的那一天都是对自己有利的,那么你的幸运数字是什么,今天起名网教你如何手把手查询自
  • 属鸡的今年运气如何
    属鸡的今年运气如何
    第一篇属鸡的今年运气如何:属鸡的人2018年运程,属鸡的今年多大,属鸡的女人,属鸡人出生月的命运,2018属鸡的运程,酉鸡五行分析酉属金本命佛不动尊菩萨吉祥颜色金、啡、啡黄、黄大凶颜色绿、红、蓝、灰幸运数字5、7、8大凶数字1、3、9幸运花剑兰、凤仙花、鸡冠花吉祥方位西、西南、东北方戌
  • ico代币
    ico代币
    一:[ico代币]ICO所谓ICO,全称Initial Coin Offering,意思是“数字货币首次公开募资”,概念拷贝自股票市场的IPO。不同的是,IPO是企业为了发展而向公众筹集资金,ICO是企业为了发展而向公众筹集虚拟货币,将发行的标的物由IPO的证券变成了数字加密货币。ICO发行团队在进
  • 男性右下腹部隐痛的原因
    男性右下腹部隐痛的原因
    (1) [男性右下腹部隐痛的原因]男人右下腹部隐痛,千万别大意,可能是得了这种病!偷偷看:很多没有性常识和性经验的女生都会有疑问,那就是女生第一次是不是都会流血,没有出血就代表不是第一次吗?长按二维码加我了解更多,回复数字193了解详情。腹痛是一种常见的复杂疾病,右下腹指的是与肚脐眼相平的右腹
  • 监控分几种
    监控分几种
    监控分几种篇(1):监控摄像机有哪几种类型目前安防市场上主流的监控摄像机大致分为模拟和数字两大类一、模拟 按照传感器分为:CCD和CMOS两种。 按照是否带红外灯分为:红外相机和非红外相机。 按照分辨率分为:420线,480线,540线,600线,700线,目前700线是主流。  按照外型分为:枪机
  • 穷了一辈子
    穷了一辈子
    穷了一辈子篇一:人生中 注定穷一辈子的四种人摘要【人生中 注定穷一辈子的四种人】赚钱是为了更好地生活,有的人,只知道赚,却不懂得花、不懂得享受。这样的人,金钱对他而言只是一个数字,而没有转换成其他的价值,享受的价值、快乐的价值、给予的价值。拥有再多的钱都不算富有,注定只是赚钱的工具,而成不了钱的主
  • 国家隐瞒的超能力者
    国家隐瞒的超能力者
    国家隐瞒的超能力者篇1:超能力者!!国家不公布的资料这个世界的确有异能者,也有许多难一想像的事,这取决于个人的认知,其实这个世界不像我们看见的那么简单. 每年世界上发现的超能力者都多到近一万 这是一个恐怖的数字 因为证实了超能力者是随着社会进步发达和世界人口的变化取决的,其中一部分异能者具备超强的
  • 小瘪三
    小瘪三
    第一篇小瘪三:牛X,小瘪三竟稀里糊涂混成了皇帝从古至今,在大天朝出现的正统皇帝加起来粗略一算应该总共有611位,如果加上三国时期五代十六国西夏金辽以及少数民族临时政权那些乱七八糟的野鸡皇帝,那数字可就没法算了。这些皇帝有起兵造反上位的,有当太子继位的,也有搞政变阴谋得来的,当然了,还有是被楞推上去当