C语言知识点总结
来源:互联网 发布:腾讯视频 for mac 编辑:程序博客网 时间:2024/05/16 12:00
有段事件没有写C程序了,有些地方有些生疏了。这两天事情比较少,准备再系统的看一边C的基础知识。这里再总结一下平时没太注意的知识要点。
2、取模运算%
C99规定,如果a
和b
是整型,b
不等于0,则表达式(a/b)*b+a%b
的值总是等于a。
结合整数除法运算要Truncate Toward Zero,可以得到一个结论:%运算符的结果总是与被除数同号(想一想为什么)。其它编程语言对取模运算的规定各不相同,也有规定结果和除数同号的,也有不做明确规定的。
写一个函数,参数是整型变量x,功能是打印x的个位和十位:
3、float和double类型
问题发现:当x定义为double类型时,上面程序错误,x读取的值有误。但是编译时需要加上-Wall选项才能发现原来是类型不匹配。
如何读取double类型变量?
4、结构体的初始化
注意:z1
必须是局部变量才能用另一个变量x
的值来初始化它的成员,如果是全局变量就只能用常量表达式来初始化。这也是C99的新特性,C89只允许在{}中使用常量表达式来初始化,无论是初始化全局变量还是局部变量。
{}这种语法不能用于结构体的赋值,例如这样是错误的:
以前我们初始化基本类型的变量所使用的Initializer都是表达式,表达式当然也可以用来赋值,但现在这种由{}括起来的Initializer并不是表达式,所以不能用来赋值。
有些时候结构体或数组中只有某一个或某几个成员需要初始化,其它成员都用0初始化即可,用Designated Initializer语法可以针对每个成员做初始化(Memberwise Initialization),很方便。Designated Initializer是C99引入的新特性,用于初始化稀疏(Sparse)结构体和稀疏数组很方便。例如:
结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的,例如:
同样地,z2
必须是局部变量才能用变量z1
的值来初始化。既然结构体变量之间可以相互赋值和初始化,也就可以当作函数的参数和返回值来传递。
由.运算符组成的表达式能不能做左值取决于.运算符左边的表达式能不能做左值。在上面的例子中,z
是一个变量,可以做左值,因此表达式z.x
也可以做左值,但表达式add_complex(z, z).x
只能做右值而不能做左值,因为表达式add_complex(z, z)
不能做左值。
5、枚举
结构体的成员名和变量名不在同一命名空间中,但枚举的成员名却和变量名在同一命名空间中,所以会出现命名冲突。以上代码是不合法的:
本文参考《Linux C编程 一站式学习》
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- c语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结
- C语言知识点总结一
- c 语言零碎知识点总结
- 总结几个 C 语言知识点
- c语言_知识点总结
- C语言小知识点总结
- C语言知识点总结2
- C语言数组知识点总结
- tar命令
- gcc 编译及动态库和静态库
- 从电脑版页面获取新闻正文html代码
- xml解析比较
- C语言编码风格(一)——缩进和空白
- C语言知识点总结
- C语言编码风格(二)——注释
- C语言编码风格(三)——标识符命名
- C语言编码风格(四)——函数
- C语言编码风格(五)——indent工具
- 大象Thinking in UML读书笔记一
- 漫漫找工路——百度、移动、华为等公司应聘经历总结
- 一位码农的人生自述(三十八)------惊喜
- 再谈Doxygen--一个开源文档生成工具