c语言学习笔记(结合教程-C和指针

C语言指针部分的经典学习资料,学习指针不容错过的文档

1. 基本类型的赋值,转换问题。[(1)见p80;]

(1) c中是不是也和Java一样,存在隐式转换和强制转换?有区别吗?

有区别。

C中的隐式转换就是“整型提升”。C中的“整型提升”仅指:表达式中的操作数类型<=int的情况下(short和char),提升到int型。

(注意:是表达式中的char和short在使用之前被转换为int。)

>=int型的类型的提升,被称为寻常算术转换:

寻常转换应该遵循:int – unsigned int – long int – unsigned long int – float – double – long double由小到大的转换规则:一个操作数类型相对另一个操作数类型排名较低(较小),则自动转换为相对较大的类型。(数据转换按数据存储长度增长的方向进行。)

寻常算术转换和强制转换均为“算术转换”。寻常算术转换侧重于自动转换到相对较高的类型(如int - float),强制转换则可人为将其转换到其他类型(如long – int ; int - double)。

(记住:是先转换,再执行操作。)

(记住:若某个操作符的各个操作数属于不同的类型,则除非其中一个操作数转换为另一个操作数类型,否则操作无法进行。问:该规则是否也针对赋值操作符“=”?不过等号右边的操作数(右值)自动转换成了左值的类型。)

(注意:以上概念是针对算术操作符而言的。算术操作符就是+ - * / %。

问:那对于其它操作符呢?尤其是关系操作符?)

(2) 不同类型操作数互相赋值时的精度变化情况:

从int到float : 精度可能会降低(有点例外)。Float只能保证6位有效数字的精度(浮点型以指数方式存储),虽然长度为4个字节。

在32位平台上,通常int是4字节长度,最多表示到21亿多,而int型是“绝对精确”的,换句话说,就是int行最多可以保证10位十进制有效数字的精确度。而float只能保证6位有效数字的精确度,因此int到float的转换是可能丢失精度的。 比如整数“1234567899”转换成float后,大约是:1.23457936乘10的9次方,也就是从第7位有效数字开始已经不准确了。double可以保证15位10进制有效数字的精度,所以从int到double不会有这个警告。 (以上摘录自网络。)

(3) 左值与右值的注意点?

你可能喜欢

  • C语言指针详解
  • 语言分析
  • 彻底搞定C指针
  • C语言经典程序
  • C语言经典算法
  • C语言函数指针
  • 专升本历年试题

c语言学习笔记(结合教程 C和指针相关文档

最新文档

返回顶部