C语言中使用到的词汇有标识符、关键字、运算符、分隔符、常量和注释符等。今天主要学习字符集、关键字、标识符和注释符。
字符集
C语言的字符集是ASCII字符集的一个子集,由字母,数字,标点符号和特殊字符(标点符号和转义字符)构成。
字符串:
’单引号引起来的为单个字符‘
“双引号引起来的为一串字符”
\0是字符串结束的标志,一般隐藏在字符串的结尾
这是不加\0的程序及输出结果:
这是加了\0后的程序及输出结果:
由此可见,截止标志至关重要!!
注意:在计算字符串长度时\0仅作为结束标志,不计入字符串长度。
标识符-------为对象命名
标识符只能是字母、数字、下划线组成的字符串,并且第一个字符必须是字母或下划线。
注意:标识符严格区分大小写。习惯上,符号常量用大写字母表示,变量名用小写字母表示;
变量名的长度不要超过31个字符(为了程序的可移植性);
命名时尽量做到”见名知意“;
先定义,后使用。
转义字符
名 称 | 符号 | 名 称 | 符号 |
空字符 | \0 | 换行 | \n |
换页 | \f | 回车 | \r |
退格 | \b | 响铃 | \a |
水平制表 | \t | 垂直制表 | \v |
反斜线 | \\ | 问号 | \? |
单引号 | \' | 双引号 | \" |
1-3位八进制数所代表的字符 | \ddd | 1-2位十六进制数所代表的字符 | \xdd |
注释-------用来解释复杂代码,提高代码可读性
//单行注释
/*
多行注释(不支持嵌套注释)
*/
快捷键:
crtl+k+c 多行注释
crtl+k+u 取消注释
在vs2019中,也可以点击“注释选中行”,实现多行注释(推荐)
效果
注释右边的键是”取消注释“。
关键字
关键字也称为保留字,具有固定含义,用户只能使用而不能改变其含义;关键字也不能做变量名。 根据关键字的作用,可将其分为四种:
数据类型关键字,控制语句关键字,存储类型关键字,其他关键字。以下给出32个关键字的简单解释。
1、关于数据类型的关键字(12个)
(1) char :声明字符型变量或函数
(2) double :声明双精度变量或函数
(3) enum :声明枚举类型
(4) float:声明浮点型变量或函数
(5) int: 声明整型变量或函数
(6) long :声明长整型变量或函数
(7) short :声明短整型变量或函数
(8) signed:声明有符号类型变量或函数
(9) struct:声明结构体变量或函数,可以用来实现C语言的封装,继承,多态等等。
(10) union:声明共用体(联合)数据类型 ,union类型可以用来提高内存的使用率。
(11) unsigned:声明无符号类型变量或函数
(12) void :声明函数无返回值或无参数,声明无类型指针。
2、关于控制语句的关键字(12个)
循环语句
(13) for:一种循环语句
(14) do :循环语句的循环体
(15) while :循环语句的循环条件
条件判断语句
(16)if: 条件语句
(17)else :条件语句否定分支(与 if 连用)
(18)switch :用于开关语句
(19)case:开关语句分支
(20)default:开关语句中的“其他”分支
在case...switch语句中,当一个条件输入,从满足条件的那个case语句开始执行,直到遇到跳转指令(break;return;goto;contine;),所以建议在每条case语句后面加上break。
跳转语句
(21)goto:无条件跳转语句
(22) continue:结束当前循环,开始下一轮循环
(23) break:跳出当前循环
(24)return :子程序返回语句(可以带参数,也可以不带参数),在return语句之后函数中的所有指令都不会执行,所以需要确保在return语句之前执行完必要的指令。
3、关于存储类型的关键字(4个)
(25)auto :声明自动变量 一般不使用,因为当我们声明一个局部变量是默认就是auto。
(26)extern:声明变量是在其他文件正声明(也可以看做是引用变量),一般也需要经常使用,因为在C语言里面,全局变量和函数都是默认extern的属性。
(27)register:声明寄存器变量,声明为register的变量是存放在CPU的寄存器里面的,所以读取速度非常快,但是数量有限,当定义的多个register变量,编译器多的那些register变量转换为auto变量。(计算机中的数据可以存到高速缓存、寄存器、内存、硬盘中,其中寄存器的 速度最快,但是空间最小)。
(28)static :声明静态变量
a、修饰全局变量:使全局变量只能在自己所在的源文件内部使用,其他源文件不能使用(因为全局变量被static修饰之后,他的外部链接属性变成了内部链接属性,其他源文件就不能连接到这个静态的全局变量了);
b、修饰局部变量:改变了局部变量的生命周期(本质上是改变了变量的存储类型,由栈区到静态区);
c、修饰函数:当把函数声明为static时,它的作用范围变为本源文件,本质上,是属性由external(外部)变为internal(内部);
4、其它关键字(4个)
(29)const :声明只读变量
(30)sizeof:计算数据类型长度
补充:sizeof与strlen的区别:sizeof是运算符,而strlen是函数;sizeof计算的是数据类型的大小,而strlen计算的是字符串的长度;sizeof的参数既可以是数据类型,也可以是变量,而strlen的参数只能是char*,而且必须是空字符结尾;sizeof返回值类型为unsigned,而strlen返回值为signed,因为它需要返回负数来表示出错情况。
(31)typedef:用以给数据类型取别名,当一个数据类型很长时(比如说函数指针),我们就可以用typedef来选用一个很合适的名字来替代它;
(32)volatile:说明变量在程序执行中可被隐含地改变。
volatile 修饰的变量不允许编译器对与它有关的运算做任何优化;用volatile定义的变量可能会在程序外被改变,所以每次都必须从内存中读取,而不能把他放在cache或寄存器中重复使用。一般用在以下几个地方:
a、并行设备的硬件寄存器(如:状态寄存器)
b、一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
c、多线程应用中被几个任务共享的变量