c语言复习要点摘要

国庆利用大假复习了下c语言 下面将主要的要点摘录下,并不包括所有内容,只包括自身不太熟悉的那部分
1、“定义”指建立或分配单元的位置,而“说明”则说明变量的性质,但并不分配单元。比如用extend表示的单元 都只是说明。
2、int通常反映特定机器的自然大小,一般为16位或者32位,short对象一般为16位,long对象一般为32位
3、枚举是使常量值与名字相关联的又一种方便的方法,相对于#define语句的优势是常量值可以由自己控制
4、取模运算符%不能作用于float或double对象,在有负的运算分量时,整数除法截取的方向以及取模运算结果的符号取决于具体的机器,在出现上溢或下溢时所采取的动作也取决于具体的机器
5、&&与||链接的表达式从左到右计算,但是一旦知道结果真假就立即停止计算 比如dosth&&print true|| print false 相当与一个if else语句
6、按照定义,如果关系表达式与逻辑表达式的计算结果为真,那么它们的值为1,如果为假,那么它们的值为0
7、为了保证程序的可移植性,如果要在char变量中存储非字符数据,那么最好指定signed 或unsigned限定符
8、加加与减减运算符只能作用与变量,作用于表达式是非法的
9、c语言有6个用于位操作的运算符,这些运算符只能作用于整数分量
   按位与运算符通常用来屏蔽某些位
   按位或运算符通常用来打开某些位
   按位异或运算符对应的位相同为0 不同为1
   移位运算符>> <<移位方向指向箭头尖所对的方向,当右移是运算分量一定为正。在右移时,对左边空出的部分用符号位填空或者用0填空,取决于具体的机器。
   一元运算符~用于整数的反码
10、每个else与最近的还无else匹配的if匹配(无花括号分割的情况)
11、如果在函数定义中省略返回类型,则缺省为int
12、作用域规则:
    怎样编写说明才能使所说明的变量,在使用时被认为是正确的
    怎样安排说明才能保证在函数载入时,各部分能正确的相连
    怎样组织说明,才能使得只需一份拷贝
    怎样初始化外部变量
13、另外一个方面,如果一个外部变量在定义之前就要被使用到,或者这个外部变量定义在所要使用的原文件不相同的源文件中,那么要在相应的变量说明中强制性使用关键词extern
在一个源程序的所有源文件中对一个外部变量只能在某个文件中定义一次,而其他文件可以通过extern说明来访问
在外部变量定义中,必须指定数组的大小,但是在extern说明中则不一定要指明数组的大小。
14static的用法
  通常,说明之前前缀以关键词static来指定静态存储,以免被其他外部源码使用
  说明函数,则该函数名词就不能用在除函数说明所在文件之外的其他文件中
  static说明也可以用于说明函数内部变量,内部静态变量是一种在能在某一特定函数中使用的但一直占据存储空间的变量,且只会被初始化一次。可以用于某些计数的特殊用途。
15、c预处理程序
    #include "文件名"或 #include <文件名>的行都被替换成由文件名所指定的文件的内容,如果文件名用引号括起来,那么就在源程序所在的位置查找该文件。
    #define 名字 替换文本 替换文本可以是任何字符串,正常情况下,替换文本是#define 指令所在行的剩余部分,但也可以把一个比较长的宏定义 分成若干行,这时需要在尚待延续的行后加上反斜杠/即可。替换只对单词镜像,对括号中的字符串不起作用
    #undef 指令用于取消对宏名字的定义,这样做通常为了保证一个调用所调用的是一个实际函数而不是一个宏
    形式参数不能用带引号的字符串替换,然而,如果在替换文本中,参数名的#作为前缀,那么它们将被由实际变元替换的参数扩展成带引号的字符串
    预处理运算符##被宏扩展提供了一种链接实际变元的手段,如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描
    #if语句中包括一个常量整数表达式(其中不能包含sizeof类型强制转换运算符或者枚举常量:不是c语言的一部分 无法识别这些东西)若该表达式的求值不等于0,则执行其后各行,直到遇到#endif #elif或者#else语句为止
    #ifdef与#ifndef用于判断是否定义了相关的宏
16、必须注意到,数组名字和指针之间仍然存在一点区别,指针是变量,但数组名不是变量
    一般而言,可以像对其他变量一样对指针进行初始化,尽管在一般情况下,指针有意义值只能是0或者表示已定义的某一类型的数据的地址表达式。
    指针与整数不能相互转换,但0例外。指针可以和整数进行相加或者相减运算
    有效的指针运算包括:相同类型指针间的赋值运算,指针值加成一个整数值的运算。指向相同数组中元素的指针之间的加减或者比较运算。将指针赋值为0或指针与0之间的比较运算
17、 *p++ = val; val = *--p 标准的进出栈的操作。
18、命令行变元的第一个字符串为函数名(程序名)
19、千万不要以为一个结构的大小等于它各成员大小的和,因为不同对象有不同的对齐需求,所以结构中也有可能出现无名字的“洞”
    一个结构可以包含自身结构的指针,但不能包含其实例(嵌套性)
20、在任何意义上 typedef都没有创建一个新的类型,它只是为某个已存在的类型增加了一个新的名称。由于可以被编译程序解释,因此与#define还是有区别的。
21、联合。读取的类型必须是最近一次存入的类型,跟踪当前存入联合中的类型是程序员的责任,如果存入类型与提取类型不同,则结果取决于实现
   一个联合只能用它的第一个成员类型值进行初始化
22、位字段。有关位字段的几乎所有属性都取决于实现,一个字段是否能覆盖字段边界由实现定义,字段可以无名字,无名字段(只有一个冒号和宽度)被用于填充。特殊宽度0用于强制在下一个字边界上对齐,字段只能被说明成整型,为了移植方便需显示说明该整型是signed还是unsigned,且不能应用&运算符

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值