广州网站公司推广建设,做网站是怎样赚钱的,多媒体技术和网页设计题库,可信网站标准版(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
在C和C语言中#xff0c;类型转换与转义是有点像的#xff0c;有时可能被误解#xff0c;这块需要仔细辨别。
类型转换形如#xff0c;把不同字节数或相同字节数的类型值进行转换#xff0c;强调的是数值转换过去语言中类型转换与转义是有点像的有时可能被误解这块需要仔细辨别。
类型转换形如把不同字节数或相同字节数的类型值进行转换强调的是数值转换过去也就是取值后把取值给对方对方的取值范围可能覆盖住也可能不能覆盖住不能覆盖时就会出现数据截断。
例如 float f 1.0; bool b f; char c f; short s f; int n f; double d f; printf(“n%d, c%d, b%d, s%d\n”, n, c, b, s); 打印结果 f1.000000, b1, c1, s1, n1, d1.000000
例如类型转换发生截断的情况 int n 65536 255; char c n; bool b n; short s n; printf(“n%d, c%d, b%d, s%d\n”, n, c, b, s); 打印结果 n65791, c-1, b1, s255
上面是类型转换的情况。可以看出转换时是值传递的过程是从类型上取出数值然后把数值给另一个类型的变量。我们知道float与double是采用的科学计数法int与short等采用的正值原码负值补码形式字节的设定方式是完全不同的的但是类型转换时并不对值设定产生冲击采用的是值传递给对方的方式。
类型转义的情况就不同了类型转义通常是字节相同的情况把一个类型的二进制数据当成另一种类型来使用。 类型转义涉及对一块数据进行重新解释的含义。把一块数据当成某种类型进行使用而不考虑这块数据原来是什么字节的分布怎么设定出来的。
例如把float类型当成int类型来取值使用 float f 1.0; int n * (int *)f; int m * (int *)f; int q * reinterpret_castint *(f); int t reinterpret_castint(f); printf(“f%f, n%d, m%d, q%d, t%d\n”, f, n, m, q); 打印结果 f1.000000, n1065353216, m1065353216, q1065353216, t1065353216
转义取值的过程是先把数据的地址指针或引用取出来然后对指针或引用强制当成另一种类型来使用、来取值。 使用reinterpret_cast时也是是一样把指针、引用类型进行重新解释解释当成另一种类型然后对外进行使用。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)