一、C语言基本常识:
1. C语言由函数构成的
2. main函数是程序的入口
3. C语言中不能出现中文或中文字符(注释和字符串除外)
关键字: 由C语言提供的表示特殊含义的单词
特点: 1. 全部小写 2. 在Xcode中是紫褐色
标识符: 程序员自己在代码中为某些东西起的名字
规则: 1. 字母,数字,下划线组成
2. 严格区分大小写
3. 不能以数字开头
4. 不能与关键字重名
规范: 驼峰表示法
注释: 对代码的解释说明,它是程序员看的,不参与编译
单行注释 和 多行注释
多行注释可以嵌套单行注释,但多行注释不能嵌套多行注释
数据: 静态数据: 存储在硬盘上的数据
动态数据: 内存中的数据
常量: 不可改变的量
变量: 可以改变的量
二、进制
十进制
二进制 0b 或 0B
八进制 0
十六进制 0x 或 0X %x 或 %X
位运算:
& | ^ ~ >> <<
三、数据类型
1、基本数据类型
int 4字节 %d,%i
float 4字节 %f
double 8字节 %lf
char 1字节 %c
枚举: 枚举本质是整形(enum)
场合: 当某个东西只有固定的几个取值的时候,使用枚举
特点: 先定义枚举类型,根据枚举类型定义枚举变量
2、构造类型
数组: 用来存放相同数据类型的多个数据的集合
定义: 数据类型 数据名称[元素个数];
遍历: 把所有元素都输出看一下(循环)
结构体: 多个数据放在一起可以表示特定的含义,我们就把它们组成结构体
特点: 要先定义结构体类型,再定义结构体变量(struct)
结构体与函数的关系: 就如同基本数据类型和函数的关系
3、指针
指针就是地址
指针变量: 用来存储地址的变量
1. 指针只有初始化了才可以访问它所指向的存储空间
2. 如果一个指针没有初始化,它里面是垃圾值,称为野指针
3、 指针不能直接赋值一个整形数
基本数据类型的指针: 指向基本数据类型的指针
格式: 数据类型 * 指针变量名称;
结构体指针: 指向结构类型的指针
格式: 结构体类型 * 指针变量名称;
1. 访问其所指向的结构体成员的方式:
1): (*指针变量名称).成员名称
2): 指针变量名称->成员名称
数组指针: 指向数组的指针
格式: 所指向的数组的数据类型 (*指针变量名)[所指向的数组的元素个数];
1. 这种指针与二维数组名是等价的
函数指针: 指向函数的指针
格式: 所指向的函数的返回值类型 (*指针变量名)(所指向的函数的形参列表...)
1. 通过函数指针调用函数
1): (* 指针变量名称)(实参列表)
2): 指针变量名称(实参列表)
4、运算符
1. 算术运算符
+ - * / %
2. 赋值运算符(除逗号运算符,优先级最低的运算符)
= += -= *= /= %=
3. 自增自减运算符
++a; 先加1,再运算
a++; 先运算,再加1
4. sizeof运算符: 用来计算变量,常量,数据类型所占用的存储空间的字节数
1. sizeof(常量) sizeof 常量
2. sizeof(变量) sizeof 变量
3. sizeof(数据类型)
5. 逗号运算符(优先级最低)
1. 运算顺序: 从左到右
2. 逗号表达式的运算结果为最后一个表达式的值
6. 关系运算符(比较运算符)
== != > < >= <=
算术运算符 > 关系运算符优先级 > 赋值运算符
7. 逻辑运算符(优先级高的优先结合)
&& || !
8. 三目运算符
条件表达式 ? 结果1 : 结果2
优先级: 一般优先级越高,越先进行运算
结合方向: 当优先级相同的时候,计算方向(从左往右,从右往左)
四、流程控制
控制程序的执行流程
1. 顺序结构: 按照从上往下的顺序执行
2. 分支结构: 分支结构相当于岔路口,当条件满足的时候就执行某段代码
if语句:
1. if语句必须以if开头
2. if可以有多个else if
3. if语句只有一个else
4. if语句中最多只有一个代码块会被执行
5. 如果有else那么必然有一个代码块会被执行
switch语句: 当变量与某个常量相等的时候,就执行这个常量所对应的代码块中的语句
格式:
switch(变量){
case 常量:
...
break;
case 常量:
...
break;
default:
...
break;
}
注意点:
1. 仅仅支持整形数(int,char,enum)
2. case 后面只能是常量 或 常量表达式
3. case 后面的常量值不能相同
4. 结束条件:
遇到breal;
运行到switch中的 "}"
3. 循环结构: 当条件满足就会一直循环执行循环体中的代码,直到条件不再满足
1. while 语句: 当条件满足的时候就指向while后面大括号中的语句
2. do while 语句: 循环体中的代码至少执行一次
3. for语句;
for(初始化表达式;条件表达式;循环后操作表达式){
语句;
...
}
break;
1. 用在switch语句中用来结束switch语句
2. 用在循环结构中,用来结束当前的循环语句
continue;
1. 只能用再循环结构中,跳过本次循环体中continue后面的语句,进行下一个条件判断
五、函数
完成特定功能的代码段
1. 格式:
返回值类型 函数名称(形参列表){
语句:
...
}
2. 函数声明: 告诉编译器该函数已经存在了
函数的声明可以有多个,但函数的定义只能由一个
3. 函数参数:
1. 基本数据类型作为函数参数传递是 值传递
2. 数组作为函数参数传递是地址传递
3. 指针作为函数参数传递是地址传递
4. 结构体作为函数参数传递和基本数据类型一致
4. 函数返回值: 函数完成功能后要返回给主调函数中的数据
1. 返回值的类型必须与返回的值得类型一致
2. 一个函数只能有一个返回值
5. return 作用:
1. 返回值给主调函数
2. 结束函数
六、预处理指令: 在编译之前需要进行解析处理的指令
1. 宏定义: #define 宏名 值
1. 不带参数的宏定义: 在编译之前,使用宏名后面的值,替换代码中所有出现宏名标识的地方
2. 带参数的宏定义: 把参数代入宏名后面的表达式中,然后替换宏调用的地方
2. 条件编译: 在编译的时候,当条件满足的时候就编译某段代码
#if 开头 #elif #else #endif 结尾
#ifdef #endif
#ifndef #endif
3. 文件包含:
#include 拷贝所包含的文件内容到#include指令所在的位置
include <> 包含系统的头文件
include "" 包含自己写的文件