C
变量:
变量的数据类型:
- 变量按照数据的分类分为整数和浮点数
- 不同变量的数据类型是不同的
- 数据类型有整型,浮点型,字符型,指针,结构体
变量的声明:
- 变量是什么数据类型的就声明什么类型,int、float、double、char
- 变量必须要进行声明,没有经过声明的变量是不能直接拿来使用的
变量的命名规则:
- 只能由字母、数字和下划线组成,首字母只能是字母和下划线
- 大小写敏感
- 不能和关键字重名
变量名的初始化:
- 没有经过初始化的变量存放的值都是垃圾值,所以我们一般在定义一个变量的时候都会给那个变量赋一个值叫做变量的初始化
- 变量的初始化和赋值的区别
运算符:
- 运算符的优先级:算术运算>关系运算>逻辑运算>赋值运算
- .运算符的结合性:
右结合性:
单目运算符(-,(类型),++,--,*,&,!,~,sizeof)
三目运算符
赋值运算符
+、-、*、/、%、++、——
变量的自增或自减,不能用于常量
前置规则和后置规则
- 关系运算:逻辑真true、逻辑假false,非0为真0为假
在OC中的BOOL值用YES或NO
- sizeof、逗号表达式
分支语句:
- 1.单分支条件判断语句 if
- 2.双分支条件判断语句 if-else
- 3.多分支条件判断语句 if-else if
- 4.switch语句:
- switch-case语句用于多分支条件判断
- 控制表达式是由整型或字符类型变量组成,如果是表达式,表达式的结果一定要是个整数;
- case后面的常量不可以重复,没有顺序要求,但是必须是整型常量,不能是变量、表达式、浮点数、字符串;
- break用于结束switch语句的运行,如有没有break语句,switch语句就会连续执行。
- default可有可无,当所有case后面的常量与switch后面的表达式的值都不相同时,执行其后的语句。
- 优势:switch-case可以简化多分支条件判断(理由)、逻辑结构更加清晰(理由)、执行速度快(理由)
循环结构:
- 表达式1:赋值表达式;表达式2:条件表达式,用来判断是否执行循环体的控制语句;表达式3:迭代表达式;
- for循环一般用于实现固定次数的循环;
- for循环的三个表达式都可以省略,如要要省略表达式1,就要在循环前对变量进行定义并且初始化值;
- 如有省略表达式2,条件就会永远为真,就会导致死循环;
- 如果省略表达式3,也会导致死循环,在循环里面加上循环体就可以了。
- 条件表达式:用来判断循环体是否执行的控制语句;
- 循环体:可以是一条或者多条语句;
- while循环一般用于处理未知次数的循环
- 3.do~while循环:一般用于处理菜单类程序
- 4.三种循环的区别:
判断先后的区别:
- for、while是先判断,后执行循环体
- do~while是先执行循环体,后判断
用途:
- for:用于固定次数的循环
- while:用于不固定次数的循环
- do~while:用于菜单类程序(循环体至少要被执行一次的程序)
- break语句:终止整个循环
- continue语句:结束本次循环
数组:
- 1.数组中的每一个变量称为每一个元素,数组是由多个元素组成的
- 2.数组的下标:数组中的元素是靠数组的下标来区分的,数组的下标是从0开始计算的
- 3.数组的长度:数组的长度是由数组元素的个数来决定的,数组有多少个元素就代表数组的长度有多长
- 4.数组名与数组首地址:数组的数组名代表的是一个地址,数组的地址是通过数组的第一个元素的地址决定的,数组名是一个常量地址,所以数组名不能够作左值
- 5.数组的初始化:
- 当数组长度等于初始化元素的个数时,数组可以不写数组长度
- 当数组长度大于初始化元素的个数时,多余的元素会被自动清零
- 当数组长度小于初始化元素的个数时,多余的元素会被自动丢弃
C99新增的方法可以直接对指定的元素进行初始化,未被指定初始化的元素会被自动清零
- 6.数组的元素进行赋值的时候只能逐个赋值,不能整体的进行赋值,数组的元素可以拷贝到另一个数组上
- 7.数组的遍历:正向遍历、反向遍历
- 8.二维数组:二维数组在进行初始化的时候只能省略第一维
函数:
- 如果函数定义主函数的前面,就不需要进行声明,如果函数定义在函数的后面,就要在主函数前进行函数的声明
- 无返回值的用void对函数进行声明,有返回值的就要使用返回值的类型对函数进行声明
常量、变量、表达式、函数调用都可以作实参
值传递:实参赋值给形参之后,形参在函数体内发生的变化,不会传回给实参
个数的对应关系:实参必须与形参一一对应
类型转换:以形参为标准就行转换,转换成形参的数据类型
return关键字:结束所在函数的运行、跨函数赋值到函数调用处
exit:结束整个程序
递归:是一种特殊的函数调用方法,自己调用自己
形参是一个局部变量
定义在函数体内的变量是局部变量
定义在符合语句中的变量是局部变量
循环体内定义的变量是局部变量
局部变量的作用域是从定义行到函数体的结束
全局变量是定义在函数体和主函数的外面
如果不对其进行初始化,编译器会自动给它赋值为0
全局变量的作用域是从定义行开始到整个文件的结束
当局部变量和全局变量同名的时候,全局变量就会不起作用,程序只是用其所在作用域内定义的局部变量
用static修饰的局部变量称为静态局部变量,静态局部变量的生命周期会延长到程序运行结束,但是作用域依然只是在函数体的内部
指针:
- 指针就是地址,地址就是字节在存储中的编号
- 指针变量:专门存储地址的变量,简称为指针
- 指向:指针变量p中保存另一个变量x的地址时,就说该指针变量指向变量x
- 引用:使用指针操作(赋值、访问)其指向的变量
- 指针做函数参数,可以实现地址传递
- 指针作为函数返回值的类型:返回一个地址,当返回一个局部变量的地址时,该局部变量会被释放,从而造成返回的地址变成无效地址
- 指针变量的存储空间,与操作系统的位数有关
- 数组作函数形参:当数组作函数形参的时候,系统会将其编译成指针变量
预处理:
- 在编译之前对源程序进行的处理工作
- import:将其后的.h文件包含进来
<>:直接到系统文件夹中找要包含的.h文件
“”:双引号是先到工程文件夹中找.h文件,如果没有,再到系统文件夹中找
带参宏的使用注意事项:
宏函数中的参数一定要用括号括起来,以防止替换后的优先级问题
宏函数中的整个表达式也需要用括号括起来,以防止替换后的优先级问题
宏函数中有多条语句时,应写成复合语句,以防止变量的重定义问题
调用宏函数时不要使用++、—作为实参
宏函数之间可以相互调用
结构体语法:
- 结构体是程序员自己定义的一种数据类型
- 结构体变量的成员叫做成员变量,成员变量只能逐个赋值,不能整体操作
- 点是一个成员运算符
- 通过指针对成员变量赋值时,需要使用->这个成员运算符
- 结构体作函数形参也分为值传递和地址传递
枚举:
- 只出现在编译器中,运行时直接被替换成相对应的整形值
- 枚举中只能定义常量,枚举常量可以指定值
- 枚举常量只能是整数值,不能为小数