《C程序设计语言》笔记 参考手册2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《C程序设计语言》笔记 参考手册2相关的知识,希望对你有一定的参考价值。

基本类型

基本类型包括多种

声明为字符的对象要大到足以存储执行字符集中的任何字符

如果字符集中的某个字符存储在一个char类型的对象中,则该对象的值等于字符的整型编码值,并且是非负值

其他类型的对象也可以存储在char类型的变量中,但取值范围 特别是是否呆符号,同具体的实现有关

以unsigned char声明的无符号字符与普通字符占用同样大小的空间,但其值总是非负的

以signed char 显式的声明带符号字符与普通字符也占用同样大小的空间

除char外 还有3种不同大小的类型

short  int

int

long int

普通的int对象的长度和宿主机器的体系结构决定的自然长度相同

其他类型的整型可以满足各种特殊的用途

枚举是一种具有整型值的特殊类型.与每个枚举相关联的是一个命名常量的集合

枚举类型类似于整型

但是 如果某个特定枚举类型的对象的赋值不是其常量中的一个,或者赋值的不是同一个类型的表达式,则编译器通常产生警告信息

因为以上这些类型的对象都可以解释为数字

所以可以将它们统称为算术类型

char类型

各种对象的int

枚举类型都统称为整型类型


float

double

long double

统称为浮点类型

void类型声明一个值的空集合,它常被用来说明不返回任何值的函数类型

  

派生类型

除了基本类型外,我们还可以通过以下方法构造出派生类型

从概念上讲派生类型可以有无限多个

给定类型对象的数组

返回给定类型对象的函数

指向给定类型对象的指针

包含一系列不同类型对象的结构

可以包含多个不同类型对象中任意一个对象的联合

  

类型限定符

对象的类型可以通过附加的限定符进行限定

声明const的对象表示此对象的值不可修改

声明volatile的对象表示它具有与优化相关的特殊属性

限定符既不影响对象的取值范围,也不影响其算术属性

  

A.5 对象和左值

对象是一个命名的存储区域

左值是引用某个对象的表达式

具有合适类型与存储类的标识符便是左值表达式的一个明显的例子

某些运算符可以产生左值

  

A.6 转换

根据操作数的不同,某些运算符会引起操作数的值转换另一种类型

  

整型提升

在一个表达式中,凡是可以使用整型的地方都可以使用带符号和无符号的字符 短整型或整型为字段,还可以使用枚举类型的对象

如果原始类型的所有值都可以用int表示,则其赋值将被转换为int类型 

否则将转换为unsigned int

  

整型转换

将任何整数转换为某种指定的无符号类型数的方法是

以该无符号类型能够表示的最大值加1为模,找出与此整数同余的最小非负值

的对二的补码表示中,如果该无符号类型的位模式较窄,这就相当于左截取

如果该无符号类型的位模式较宽,相当于对带符号的值进行符号扩展和对无符号的值进行0填充

将任何整数转换为带符号的类型时,如果它可以在新类型中表示出来,则其值保持不变

否则它的值同具体实现有关

  

整数和浮点数

当把浮点数转换为整型时,小数部分将被丢弃

如果结构值不能用整数表示,则其行为是未定义的

特别是,将负的浮点数转换为无符号整型的结果是没有定义的

当把整型转换为浮点类型时,如果该值在浮点类型可表示的范围内但不能精确表示,则结果可能是下一个较高或较低的值

如果该值超出可表示范围,则其行为是未定义的

  

浮点类型

将一个低精度的浮点类型转换为相同或高精度的浮点类型时,它的值保持不变

将一个高精度的转换为地精度时,如果它的值在可表示范围内,则结果可能是下一个较高或较低的可表示值.如果结果在可表示范围外,则其行为是 未定义的

  

算术类型转换

 

许多运算都会以类似的方式在运算过程中引起类型转换,并产生结果

其效果是将所以操作数转换为同一公共类型,并以此作为结果类型

这种方式的转换称为普通算术类型转换

  

指针和整数

指针可以加上或减去一个整型表达式.在这种情况下整型表达式的转换按照加法运算符的方式进行

两个指向同一数组中同一类型的对象的指针可以进行减法运算,其结果将转换为整型

转换的方式按照减法运算符的方式进行

值为0的整型常量表达式或强制转换为 void *类型的表达式可以通过强制转换 赋值或比较操作转换为任意类型的指针

其结果将产生一个空指针,此空指针等于指向同一类型的另一空指针,但不等于任何指向函数或对象的指针

还允许进行指针相关的其他某些转换,其结果依赖具体实现

指针可以转换为整型,但此整型必须足够大

整型可以显式转换为指针

指向某一类型的指针可以转换为指向另一类型的指针,但是 如果该指针指向的对象不满足一定的存储对齐要求,则结果指针可能会导致地址异常

指向某对象的指针可以转换为一个指向具有更小或相同存储对齐限制的对象的指针,并可以保证原封不动的转换回来

对齐的概念依赖具体的实现,但char类型的对象具有最小的对齐限制

一个指针可以转换为同类型的另一个指针

指向一个函数的指针可以转换为指向另一个函数的指针

  

void

void对象值不能以任何方式使用,也不能被显式地转换问任一非空类型

  

指向void的指针

指向任何对象的指针都可以转换为void *类型,且不会丢失信息

如果将结果再转换为初始指针类型,则可以恢复初始指针

执行指针到指针的转换时,一般需要显式的强制转换

这里不同的是,指针可以被赋值为void *类型的指针,也可以赋值给void *类型的指针,并可与void *类型的指针比较

  

以上是关于《C程序设计语言》笔记 参考手册2的主要内容,如果未能解决你的问题,请参考以下文章

《C程序设计语言》笔记 (十四) 参考手册6

《C程序设计语言》笔记 (十六) 参考手册8

《C程序设计语言》笔记 (十五) 参考手册7

《C程序设计语言》笔记 参考手册3

《C程序设计语言》笔记 (十三) 参考手册5

C语言函数参考手册的目录