1类型转换
当同一个表达式出现不同的类型的字符或者数字时,小类型会自动向大类型进行转换。这样做的目的是为了防止丢失精度。
所有的转换都是临时的,只有在当前表达式内进行转换,操作数本身的类型不会改变。
1.1隐式转换
char < short < int < long < float < double < long double
举例:a = 9 + 1.0; 9是int 类型,1.0是float类型,为了不丢失精度,9会自动转换为float类型,变为9.0,a的结果是10.0。
1.2强制转换
将大类型数据转换为小类型数据。
举例:a = 9 + (int)1.0; 将float数据强制转换为int类型。不建议使用,可能会导致数据溢出或者丢失精度。
2运算符
2.1运算符优先级排序
算术运算符 > 逻辑运算符 > 赋值运算符
2.2位运算符
"~":取反,将数字存储的0 1全部对调,例:char 5 = 0000 0101,取反:1111 1010。
"&":按位与,两个都为1才为1.
"|":按位或,两个都为0才为0.
"^":按位异或,不同为1,相同为0.
运算符优先运算优先级高的再运算优先级低的,同一优先级按从左到右运算。
3控制流
3.1if/else if
if/else if语句具有排他性,如果输入符合多个表达式语句,优先执行第一个满足的表达式。
如果if语句中有很多条语句需要加上"{ }",如果只有一条语句则可以选择省略不加。
3.2switch() {case ... } 语句
switch语句后面的()内只能识别整型,不能使用浮点数。
case是符合switch之后的判断分支,每一个case语句都要加上break;否则程序在执行完符合的case语句之后,还会将后面不符合的case也执行一遍。
default:如果不满足前面列出的case则执行该语句,此语句一般放在最后,break可以选择不加。
3.3while()和do{ }while()语句
3.3.1while()
()内是判断表达式,符合则进入while循环,不符合则跳出while循环。
()内不要填固定数字,否则会造成死循环。
3.3.2do{ }while()
作用和while()语句大致相似,不过判断条件放在了循环最后,while()后要加上";",和while语句不同的是,do whlie语句最少执行一次。
3.4for循环
for(表达式1;表达式2;表达式3)。
表达式1一般是定义,例如:int a =1;a = 1;、在for循环中只执行一次。
表达式2一般是判断式,例如: a < 10;
表达式3一般是表达式1中定义的变量加减,例如:a++;a+1;a+2,表达式3一般是for循环最后进行运算。
3.5goto语句
goto语句会跳转到定义的标签处,但是标签不能放在goto前面,否则会造成死循环。
4数组初阶
int a = 10;是给变量a赋予int类型的内存,并将10储存在变量a的内存·之中,方便使用。
int a ; 将一块int内存起名为a。
int a[5];给变量a分配五个int类型的内存,a是5个内存的基地址,也是a[0]的地址。
4.1基本概念
由相同类型的多个元素所组成的一种复合数据类型。
在工程中同时定义多个相同类型的变量时,重复定义,可以使用数组
4.2变长数组。
int a[size]:"[]"内是字符而不是数字的数组被称为变长数组,size需要提前初始化赋值。
int a[size] = {1,2,3,4,5}是错误的,因为数组初始化的时候系统不认识size变量,只能在定义变长数组之后,使用a[0] = 1;a[1] = 2;这种方法来定义。
4.3计算数组
4.3.1计算数组大小
sizeof(a):输出a数组所占用内存大小
4.3.2计算元素个数
sizeof(a) / sizeof(a[0]):用a数组的总内存除以a数组一个数字所占用的内存,得到a数组中的元素个数。
每个数组都会需要有一个空间存放'\0';是系统默认的终止符,所以数组a[]所分配的空间要比需要保存的元素个数多1位。