目录
一,什么是C语言?
是一种高级语言 相比于其他高级语言而言, 更贴近硬件 可以直接操作内存,硬件设备 其运行效率是最高的 运行需要的硬件开销小
二,C语言组成:
1. 关键字 :
由编译器定义的 有特殊含义的词汇 不能用作他用
类型相关的: auto char const double extern float int longregister short signed unsighed void static enum union struct
结构相关: if else ,goto ,for ,do while ,break , continue ,switch case, default ,return ,sizeof typedef volatile
2. 标志符 :
由编程者 自定义的, 名字 ,变量名 , 函数名 ,..名 只能由 数字 字母 下划线 组成 ,不能以数字开头 不能与关键字重名。例如:a123_ _asdfw asdgasdf AAA
3. 运算符:
由编译器定义的 特殊标点符号 表示数学运算或某些特殊动作
按功能可以分为:
(1)算术运算符、 + - * / % (取余数) 结果为 一个数值
(2)逻辑运算符、 逻辑与 (&&) 逻辑或(||) 逻辑非(!) 结果为真(1 非0 )或假 ( 0 )
(3)关系运算符、 比大小 > < >= <= == != 结果为真(1 非0 )或假 ( 0 )
(4)位运算符、 将数值以二进制方式进行运算 按位与 & 按位或 | 按位亦或 ^ 按位取反~ 按位左移<< 按位右移 >>
(5)赋值运算符、 更新变量的值 a =+ B ===> a = a + b
= += -= *= /=
(6)递增递减运算符、 ++ -- 单目运算符 a++; ++a;
(7)地址运算符、 取地址运算 &a 取值运算符 *地址
(8)逗号运算符、 , 使用','分割各个表达式,其值为最后一个表达式的值 但 其他表达式都会执行一次
(9)sizeof运算符 sizeof() 计算变量占用的存储空间
(10)三目运算符: 表达式1 ? 表达式2 : 表达式3
(11)单目运算符 运算符与 一个值或变量 进行运算
(12)双目运算符 运算符与 两个值或变量 进行运算 通常运算符在中间(中值表达式)
4. 分隔符 :
为了程序的美观易读而引入的一些排版操作不影响程序本身的空格 回车换行 制表符 注释(// 单行注释 )
多行注释
/*
*/
#if 0
#endif
5. 标点符号 :
参与程序的表示, 需要严格按照规定使用 ,有些标点符号出现在表达式中为运算符使用 每一条C代码的结尾需要使用; 作为结束符 ,所有符号均严格区分大小写, 严格区分中英文 ,'#'开头的标志符 用于给编译器使用 指定如何编译这个C代码
三.基本数据类型:
1.布尔类型: 数值的bool判断非0为真 0 假
2.精确类型:
(1)整型 4字节宽度 : int (signed int) 表示, 数取值范围 ( - 2^31 ~ + 2^31-1)
unsigned int 无符号整型 0- (2^32 -1)
(2)短整型 short (signed short) 2字节存储一个整数 取值范围(- 2^15 ~ + 2^15-1)
unsigned short 无符号整型 0- (2^16 -1)
(3)字符型 char signed char 1字节 存储一个整数( -128 ~ + 127 )
unsigned char 0-255
(4)long int 长整型:
(5)浮点型: 小数 ( 例如2.5 ,3.7 ) 非精确表示法
4字节浮点数 float ( -2^128 ~ + * 2^127 ) 精度 6位10进制
8字节浮点数 double
3.void类型: 空类型
1.描述 函数的返回值或 参数没有
2.指针 指向的类型 不确定 或 任意类型
4.常量: 在设计程序时就确定的不会在程序运行过程中改变的量
数值常量,指数常量,字符常量,字符串常量,标志常量: (宏定义 类似于字符串替换)
5.变量:
本质是一个容器可以存放数的容器 ,在C语言中定义一个变量: 本质申请存储空间
格式: 存储类型 数据类型 变量名 ;
四,数据的存储类型:
auto: 自动 可以省略 由编译器决定存储位置
static: 静态区 修饰变量时 表示 指定该变量空间在静态区
register: 寄存器存储类型 表示该变量 应放到CPU的寄存器中
不是强制的 只是建议
extern : 引用存储类型 多文件编程中
表示 不需要给该变量 分配存储空间 表示在其他文件中 已经被定义了
该文件 只是引用 该变量
const: 常量类型 指定变量的存储空间 位于常量区 仅在修饰全局变量时
若 const 修饰局部变量 其存储空间位置不会改变 仅表示 该变量只读
五,C语言内存 存储位置:
1. 代码段/常量区:该段内存 只读 不允许修改
2. 静态区:该段内存 可读可写在程序运行前就分配好了, 且其中的 变量会 一直存在直到程序结束 (生命周期长)
全局变量(在函数外定义的auto变量) 或 静态变量(使用static 修饰的变量)
3. 栈区 :该段内存 会自动(在程序运行中)分配
4. 堆区 :该段内存 由程序运行时 程序员设计 申请与释放(分配)
六,C语言的输入与输出:
1.输入输出函数:
putchar(); //输出一个字符到终端
putc(); //输出一个字符到终端
puts(); fputs(); //输出字符串 // 字符串的格式化输出
printf();
printf( 格式控制字符串, 可变长参数表 );
2.输出格式:
%d %i 十进制数 ,%x %X 十六进制数,%u 无符号十进制数,%c一个字符 ,%s 一个字符串, %e指数形式显示 ,%f小数形式显示 ,%% 输出字符'%' 本身,指定输出字符宽度 %4d ,输出宽度对齐 默认 右对齐 %-8d 左对齐 ,输出小数,指定小数位数 %.2f 保留2位小数 四舍五入,%#x 输出十六进制 数 附带前缀 0x
3.C语言的终端输入:
getchar(); 从终端读取一个输入字符,fgets(); 从终端输入一个字符串 ,gets(); 有溢出风险 已经弃用
七,C语言的控制语句:
一个C程序的组成:
1.编程的3种结构:
1.顺序结构: 依次向后执行
2.分支结构: 依据某种条件选择程序的 执行路线
3.循环结构: 重复执行某些动作
2.分支结构:
(1).if结构:
if( 条件表达式 )
{
代码块1;;
}
else
{
代码块2;;
}
其运行逻辑: 当 条件表达式 为真时, 程序将执行 代码块1;; 否则 执行 代码块2;;
(2)if 语句的嵌套:
if( 条件表达式1 )
{
代码块1;;
if(条件表达式2){ 代码块3 ;; } else {代码块4 ;;}
代码块5;;
}
else
{
代码块6;;
if(条件表达式3){ 代码块7 ;; } else {代码块8 ;;}
代码块9;;
}
(3)多分支结构 switch case:
switch( 整型表达式 )
{
case 常量1: 语句块1;;
case 常量2: 语句块2;;
case 常量3: 语句块3;;
.....
default: 语句块n;;
}
整型常量表达式: 其运算结果是一个整型常量
运行逻辑:
计算 整型表达式 的值 对该值 匹配"==" case中的常量
若 没有任何一个匹配 执行default中的语句块 , default中没有语句块时 可以省略
若匹配 则从此处开始 一直向下执行
(4)switch case 多选1模式
结构:
switch( 整型表达式 )
{
case 常量1: 语句块1;; break;
case 常量2: 语句块2;; break;
case 常量3: 语句块3;; break;
.....
default: 语句块n;;
}
关键字 break; 表示跳出结构
(5)switch: 注意事项
1. switch的()括号中 只能给整型表达式
2. case 后边 只能给定常量,或整型常量表达式 在程序没有运行前 就可以计算出来的值
3. 有无break 会极大的影响程序的运行动作
3.循环结构:
while循环:
结构1:
do{ 循环语句块;; } while( 条件表达式 );
运行逻辑: (1) 先无条件执行一次 循环语句块;; (2) 再判断 条件表达式 若真 执行 循环语句块;; 回到动作(2)继 续若假 结束while;
结构2:
while( 条件表达式 ) {循环语句块;;}
运行逻辑: (1) 先判断 条件表达式 若真 执行 循环语句块;; 回到动作(1)继续若假结束while;
for循环:
结构:
for( 表达式1 ; 表达式2 ; 表达式3 )
{
循环体;;
}
八,数组
数组: 是一种构造的数据类型 ,将 多个相同类型的 数据 在内存中 有序 连续存放 这种结构称作 数组结构
元素: 数组中的 单个数据 称作数组的 元素
数组 的定义: 存储类型 数据类型 数组名 [ 元素个数 ];
存储类型: 决定数组在内存中的区域
数据类型: 决定数组元素的类型
数组名: 一个标志符 自定义
[] : 是标点符号 不能缺少表示这是一个数组
元素个数: 指定数组元素的个数目的是指定占用的内存
数组名: (1) 代表这个数组 arr[0]
(2) 代表这个数组的首地址 arr
九,函数
什么是函数?:将某些完成特定功能的 代码的 有序集合;
函数的定义:
返回值类型 函数名 (形参列表)
{
函数体;; // 代码块
return ;
}
返回值: 一个函数即一个特定的功能 对于该功能 可能需要输出或返回执行的结果给调用者
返回值类型: 即指定 函数返回值的类型;
函数名: 标志符 自定义 不能与同文件的其他函数重名
形参列表: 代码块完成该功能 可能需要外部给定一些参数
函数调用: 执行代码块
函数名(实参列表);
形参与实参:
实参是调用者 传递给函数 的 形参的值 , 是实参值的拷贝;
函数操作形参 是不会影响实参的
地址传参: 即 形参传递的内容是 实参的地址, 此种情况下 可以通过这个地址(形参) 操作实参
了解 下门课 详细学习
函数声明:
在函数被调用前, 将除函数体外 的部分 放在调用前的 函数外;
函数原型: 除函数体,剩下的部分即函数原型