C语言学习记录 第一章(个人记录)
2021/10/14 23:44:33
本文主要是介绍C语言学习记录 第一章(个人记录),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大部分为书的内容,小部分自己的理解
目录
关于变量名
数据类型及长度
常量
声明
算术运算符
关系运算符与逻辑运算符
类型转换
自增运算符与自减运算符
位运算符
赋值运算符与表达式
条件表达式
if-else
在任何一种编程语言中,如果代码的执行结果与求值顺序相关,则都是不好的程序设计风格。
部分内容来自书上,部分是个人想法
关于变量名
名字第一个字符必须为字母和下划线,因为下划线“_”被看作字母。
书上记录的是用于命名较长的变量名,但又由于库例程的名字通常以下划线开头,因此变量名不要以下划线开头(到目前还没见过所以不太理解)
数据类型及长度
short与int类型至少为16位,而long类型通常为32位,并且short类型不得长型于int类型,而int类型不得长于long类型;
类型限定符signed与unsigned可用于限定char类型或任何整型,如果char对象占用8位,那么unsigned char类型变量的取值范围位0~255;而signed char类型变量的取值范围则为-128~127;
long类型表示高精度的浮点数;
但是同整型,浮点型的长度都取决于具体的实现。
常量
long类型通常以字母l或者L结尾,如:1234L或1234l;(如果一个整数太大以至于无法用int类型表示,也将被当作long类型处理)
无符号常量以字母u或U结尾; 后缀ul或UL表明是unsigned long类型;
没有后缀的浮点数常量为double类型。后缀f或F表示float类型,而后缀l或L则表示long double类型;
感觉float用的比较少,更多使用的是double;
带前缀0的整型常量表示它为八进制形式;前缀为0x或0X,则表示它为十六进制。例:十进制数31可以写成八进制形式 031 ,也可以写成十六进制形式0xlf或0X1F。
编程对于大小写的控制还是很严谨啊;
相同的八进制与十六进制的常量也可以使用后缀L表示long类型,使用后缀U表示unsigned类型。例:0XFUL是一个unsigned long类型,其值相当于十进制数15;
字符常量‘\0’表示值为0的字符,也就是空字符(null),也可以使用‘\0’的形式代替0,以强调某些表达式的字符属性,但其数值为0;
常量表达式是仅仅包含常量的表达式。
字符串常量就是字符数组。字符串的内部表示使用一个空字符‘\0’作为串的结尾。因此,储存字符串的物理存储单元数比括在双引号中的字符数多一个。
‘x’与"x"的区别:前者是一个整数,其值是字母x在机器字符集中对应的数值(内部表示值);后者是一个包含一个字符(即字母x)以及一个结束符‘\0’的字符数组。
不同枚举中的名字必须互不相同。同一枚举中不同的名字可以具有相同的值;
声明
任何变量的声明都可以使用count限定符限定。该限定符指定变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改;
const double e = 2.71823823324; const char mag[] = "warning:";
const限定符也可配数组参数使用,它表明函数不能修改数组元素的值;
int strlen(const char[])
算术运算符
取模运算符%不能应用于float或double类型;
二元运算符+和-具有相同的优先级,它们的优先级比*、/和%的优先级低,而运算符*、/和%的优先级低,而运算符*、/和%的优先级又比一元运算符+和-的优先级低;
一元运算符我理解的是:自减--与自加++,负号(-10);
关系运算符与逻辑运算符
关系运算符的优先级比算术运算符的优先级低;
运算符&&的优先级比||的优先级高;但两者都比关系运算符和相等性运算符的优先级低;
逻辑运算符<关系运算符<相等性运算符;
类型转换
一般来说,自动转换是指把“比较窄的”操作数转换为“比较宽的”操作数;
储存在字符变量中的位模式在某些机器中可能为负的,而在另一些机器中可能是正的。为了保证程序的可移植性,如果要在char类型的变量中储存非字符数据,最好指定signed或unsigned限定符;
在if 、 while 、 for等语句的测试部分中,“真”就意味着“非0”,这二者没有区别;
一般来说,如果二元运算符(具有两个操作数的运算符称为二元运算符,比如+或*)的两个操作数具有不同的类型,那么在进行运算之前先要把“较低”的类型提升为“较高”的类型;
- 如果其中一个操作数的类型为long double,则将另一个操作数转换为long double类型;
- 如果其中一个操作数的类型为double,则将另一个操作数转换为double类型;
- 如果其中一个操作数的类型为float,则将另一个操作数转换为double类型;
- 将char与short类型的操作数转换为int类型;
- 如果其中一个操作数的类型为long,则将另一个操作数也转换为long类型;
注意⚠️,表达式中float类型的操作数不会自动转换为double类型,这一点与最初的定义有所不同;
赋值是也要进行类型转换。赋值运算符右边的值需要转换为左边变量的类型,左边变量的类型即赋值表达式结果的类型;
由于函数调用的参数是表达式,所以在把参数传递给函数时也可能进行类型转换。在没有函数原型的情况下,char与short类型都将被转换为int类型,float类型将被转换为double类型;
在任何表达式中都可以使用一个称为 强制类型转换 的一元运算符强制进行显式类型转换。下列语句中,表达式将按照上述转换规则被转换为 类型名 指定的类型:
(类型名)表达式
其实还不是特别了解sqrt的作用,但是书中频频引用,哭了。
自增运算符与自减运算符
在不需要使用任何具体值仅需要递增变量的情况下,不管作为前缀运算符还是作为后缀运算符效果都是将值增加1;
不同的是++n先将n的值递增1,然后再使用变量n的值;而n++则是先使用变量n的值,然后再将n的值递增1.
x = n++; //x -> 5 n -> 6 x = ++n; //x -> 6 n -> 6
注意⚠️ 表达式(i+j)++是非法的。
位运算符
等理解了再写上去;
赋值运算符与表达式
i = i + 2;可以缩写为 i += 2;其中的+=称为赋值运算符; expr1 op = expr2; 等价于 expr1 = (expr1)op (expr2); x *= y + 1的含义是 x = x * ( y+1 ) 并非 x = x * y + 1;
赋值表达式更接近我们的思维 ,我们通常会说“把2加到i上”或“把i增加2” , 而不会说“取i的值,加上2,再把结果放回到i中”
在所有的这类表达式中,赋值表达式的类型是它的左操作数的类型,其值是赋值操作完成后的值;
条件表达式
if-else
if(条件){ ... }else{ ... }
在任何一种编程语言中,如果代码的执行结果与求值顺序相关,则都是不好的程序设计风格。
这篇关于C语言学习记录 第一章(个人记录)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-07fastcgi 是什么-icode9专业技术文章分享
- 2024-10-07fastcgi 的详细使用教程介绍-icode9专业技术文章分享
- 2024-10-07git如何更新单个文件到本地-icode9专业技术文章分享
- 2024-10-07如何使用ASM(Abstract Syntax Tree Manipulation)技术来修改第三方AAR依赖中的函数-icode9专业技术文章分享
- 2024-10-07Activity 跳转时间耗时很长怎么优化解决-icode9专业技术文章分享
- 2024-10-07Androud Toast 有哪些常用的第三方组件-icode9专业技术文章分享
- 2024-10-07在viewmodel中怎么使用 mmkv?-icode9专业技术文章分享
- 2024-10-07MMKV.defaultMMKV() 是单例模式吗?-icode9专业技术文章分享
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享