1. 标识符,变量与常量
1)标识符
标识符的命名规则:
⒈标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线;
⒉C语言中的标识符大小写敏感;
⒊用户自定义的标识符不能与关键字同名;
2)变量
变量表示数据的属性是可变化的,有数据类型关键字进行定义。
3)常量
常量:在程序执行过程中,其值不被改变的量
(1)直接常量:
直接引用的数字等;
(2)符号常量:
使用标识符来代替一个数字(常见的:宏定义常量和 常变量)
(3)常变量
常变量:变量值不可改变的量,使用const修饰
const int a = 10;//定义一个常变量
2. 关键字
1) 基本数据类型关键字
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。
char:字符型类型数据,属于整型数据的一种。
int:整型数据,表示范围通常为编译器指定的内存字节长。
float:单精度浮点型数据,属于浮点数据的一种。
double:双精度浮点型数据,属于浮点数据的一种。
//_Bool:布尔型
//_Complex:复数的基本类型
//_Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数
//_Generic:提供重载的接口入口
2)类型修饰关键字
short:修饰int,短整型数据,可省略被修饰的int。
long:修饰int,长整型数据,可省略被修饰的int。
//longlong:修饰int,超长整型数据,可省略被修饰的int。
signed:修饰整型数据,有符号数据类型。
unsigned:修饰整型数据,无符号数据类型。
3)复杂类型关键字
struct:结构体声明。
union:联合体声明。
enum:枚举声明。
typedef:声明类型别名。
sizeof:得到特定类型或特定类型变量的大小。
//inline:内联函数用于取代宏定义,会在任何调用它的地方展开。
4)存储级别关键字
auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配。与static相反。当变量未指定时默认为auto。
static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。
register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数。
extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
const:指定变量不可被当前线程改变(但有可能被系统或其他线程改变)。
volatile:指定变量的值有可能会被系统或其他线程改变,强制编译器每次从内存中取得该变量的值,阻止编译器把该变量优化成寄存器变量。
5)流程控制关键字
(1)跳转结构
return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。
continue:结束当前循环,开始下一轮循环。
break:跳出当前循环或switch结构。
goto:无条件跳转语句。
(2)分支结构
if:条件语句,后面不需要放分号。
else:条件语句否定分支(必须与if连用)。
switch:开关语句(多重分支语句)。
case:开关语句中的分支标记,与switch连用。
default:开关语句中的“其他”分支,可选。
for:循环(K&R时期引入)
while:循环(K&R时期引入)
3. 数据类型转换
1)隐式类型转换(自动转换)
存储长度较短的转换成存储长度较长的,且不丢失数据
char--->short--->int--->unsignedint(--->long--->unsigned long)--->double
2)强制类型转换
强制类型转换:人为地将某类型转换为另一类型
强制类型转换符:()括号
4.运算符
1)算数运算符
符号及含义:+(加) -(减) *(乘) /(除) %(取余)
数目:双目运算符
结合性:自左至右
优先级:+和-:4级。*和/和%:3级
2)关系运算符
符号及含义:>(大于) <(小于) >=(大于等于) <=(小于等于) ==(判等)!=(不等)
数目:双目运算符
结合性:自左至右
优先级:>< >= <=:6级。==和!=:7级
3)自增运算符与自减运算符
符号及含义:++(自增) --(自减)
数目:单目运算符
结合性:自左至右 或 自右至左(取决于运算符位置)
优先级:2级
4)逻辑运算符
符号及含义:&&(逻辑与) ||(逻辑或) !(逻辑非)
数目:!为单目运算符,&&和||为双目运算符
结合性:!为自右至左,&&和||为自左至右
优先级:!:2级。&&:11级。||:12级
5)赋值运算符及复合赋值运算符
符号及含义:=(赋值) +=(加后赋值) -=(减后赋值)*=(乘后赋值) /=(除后赋值) %=(取余后赋值) <<=(左移后赋值) >>=(右移后赋值) &=(按位与后赋值) ^=(按位异或后赋值) |=(按位或后赋值)
数目:未知(取决于是否存在多重赋值)
结合性:自右至左
优先级:14级
6)条件运算符
符号及含义:?:(判断?前表达式是否成立,若成立取:前表达式,否则取:后表达式)
数目:三目运算符(C语言中唯一的三目运算符)
结合性:自右至左
优先级:13级
7)长度运算符
符号及含义:sizeof()(计算括号内数据类型或表达式的大小)
数目:无
结合性:无
优先级:2级
8)位运算符
(1)按位运算符
符号及含义:&(按位与) ^(按位异或) |(按位或) ~(按位取反)
数目:&和^和|:双目运算符。~:单目运算符。
结合性:&和^和|:自左至右。~:自右至左
(2)移位运算符
符号及含义:<<(左移) >>(右移)
数目:双目运算符
结合性:自左至右
9)逗号运算符
符号及含义:,(分隔作用)
数目:未知
结合性:自左至右
优先级:15级(最低)
3. 基本逻辑结构
C语言程序有3种基本结构:顺序结构、选择结构和循环结构
1)选择结构:
(1)if-else结构
(2)switch-case结构
switch()语句的一般形式如下:
switch(表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
……//多个case结构
case 常量n:
语句n;
break;
default:
语句n+1;
}
2)循环语句主要有3种:while()循环;do-while()循环和for()循环
5. 数组与字符串
1)一维数组
数组名代表数组起始地址,
计算数组所占内存空间的大小:sizeof(a);
计算数组长度:sizeof(a) / sizeof(a[0])
2)二维数组
3)字符串
字符串:由双引号""引起来的字符序列。
字符串中每个字符都视为一个字符型数组的元素,存储占1字节。
字符串的结束标志是'\0'
6. 字符串处理函数
字符串连接函数:strcat(),
字符串复制函数:strcpy()和strncpy()
字符串比较函数:strcmp()
测字符串长度函数:strlen()