嵌入式第三天
今日学习内容:C语言变量规范、表达式与类型转换、全套运算符、优先级规则,以及字符IO、scanf/printf格式化输入输出,同时弄懂了左值右值、内存赋值规则,并且可以用getchar/putchar完成字符处理的实操。
一、变量的定义、命名与初始化规则
变量本质:在内存中开辟一块对应数据类型的存储空间,通过变量名访问这块内存。使用原则:先定义,后使用。
命名规范:只能由字母、数字、下划线组成,不能以数字开头;禁止使用C语言关键字;尽量见名知意,推荐驼峰命名法或者下划线命名,不要和库函数重名。
初始化与赋值:定义变量的时候赋初值叫做初始化;定义完成之后再用=修改数值叫做赋值。严禁使用未初始化的变量,它里面存放的是内存随机垃圾值。
各类变量写法:short/int/long整型、float/double浮点型、char字符型、bool布尔型,各自的定义格式。
二、表达式、隐式/强制类型转换
表达式:运算符把常量、变量拼接而成,任何表达式都具备对应的数据类型和结果值。
混合运算的转换规则:低精度自动向高精度转换
优先级从高到低:double > float > 无符号长整型 > long > int > char/short
• char、short参与运算时,会自动提升为int;
• float运算时,自动提升成double计算;
• 整型赋值给浮点型,扩展精度;浮点赋值给整型,直接舍弃小数部分。
强制类型转换:(类型)变量,可以人为改变数据类型,但是不会修改变量本身内存的值。
特殊赋值规则:大小空间互相赋值时,小数据放进大空间会进行符号扩展;大数据存入小空间,会直接截断低位,极易出现正负颠倒的问题。
三、各类运算符详解
- 算术运算符:+ - * / % ++ –
• %取余运算符,只允许整型使用,浮点不能取模;
• 前置++:先自增,再取值;后置++:先取值,再自增,二者只能操作变量,不能作用于常量。
赋值运算符:=、+=、-=、*=、/=、%=
分清左值和右值:只有变量可以放在等号左边(左值);常量、表达式只能做右值。逗号运算符:从左往右依次执行所有式子,最终结果取最右侧表达式的值。
sizeof运算符:用来计算变量/数据类型占用的内存字节数,编译阶段完成计算,不会运行代码。
运算符优先级口诀:括号 > 单目运算符 > 双目运算符 > 三目运算符 > 赋值运算符 > 逗号运算符;双目内部优先级:算术 > 移位 > 关系 > 位运算 > 逻辑运算。
四、字符IO与格式化输入输出函数
头文件统一使用 #include <stdio.h>
- 字符专用函数
• putchar(字符):向终端输出单个字符;
• getchar():从键盘读取一个字符,返回值为该字符的ASCII码;
利用这两个函数,可以实现小写字母转大写、字符打印等功能。
- 格式化IO:scanf() 和 printf()
• printf:按照格式符输出内容,%d整型、%lf双精度浮点、%f单精度float、%c字符;
• scanf:接收键盘输入,变量前必须加取地址符&;格式串内不要随意添加\n、空格,极易造成输入阻塞,之前踩过全角百分号导致读取失败的坑,后续全部使用英文半角符号。
- 字符串IO:gets()、puts(),了解其用法以及gets存在的缓冲区安全隐患
