第2章 C语言数据类型、运算符与表达式
2.1 C语言的数据类型
1.数据类型分为三种:基本类型、构造类型、指针类型。
基本类型:字符型、整型、实型(单精度、双精度)、无值型
构造类型:枚举型、数组、结构体、共用体
2.2 C语言常量
2.2.1 数值
1.整型常量
十进制、八进制(0开头)、十六进制(0x开头)。
2.实型常量
小数形式(整数+小数点(+小数),只有7位有效数字,第八位不四舍五入,其他位四舍五入)、指数形式(eg:123e+01)、双精度实数。
3.字符常量
单引号括起一个字符,占一个字节。
4.字符串常量
双引号括起字符序列,最后一个存储字节为‘\0’。
5.符号常量
符号代替常量。(宏)
2.3 C语言变量
2.3.1 基本变量类型
char int float double void
2.3.2 类型修饰符(iOS系统中,int占32位,4个字节)
signed unsigned long short
2.3.3 访问修饰符
const:程序运行过程中值始终保持不变。
volatile:提醒编译程序,该变量的值可以不通过程序中明确定义的方法来改变。
2.3.4 变量的定义(最好初始化)
类型 变量名表;(=常数;)
2.4 类型转化(对数据长度进行临时性转换)
2.4.1 显式类型转化
(类型说明符)(表达式)
eg:(float)a
(int)(x + y)
2.4.2 隐式转换
发生在不同数据类型的混合运算时(顺序:char–>int->unsigned->long->double-> float)
2.5 运算符和表达式
2.5.1 运算符简介
种类:算术运算符(+ - * / % ++ --)、关系运算符(< > == >= <= !=)、逻辑运算符(&& || !)、位操作运算符(& | ~ ^ << >>)、赋值运算符(= += -= *= /= %= &= |= ^= >>= <<=)、条件运算符(? :)、逗号运算符(,)、指针运算符(& *)、求字节数运算符(sizeof)、特殊运算符(() [] 成员运算符)
2.5.2 算术运算符和表达式
1.基本运算符(左结合性)
+ - * / %(参与运算的量为整型)
2.运算符优先级
* = / = % > + = -
3.自增1,自减1运算符(右结合性)
4.算术表达式
<操作数><算术运算符><操作数>
2.5.3 赋值运算符和表达式
1.右结合性
左边:有存储单元的元素
右边:各类表达式、赋值表达式
2.<变量><赋值运算符><表达式>
2.5.4 关系与逻辑运算符和表达式
1.左结合性
2.表达式 关系运算符 表达式
2.5.5 逻辑运算符和表达式
1.!右结合性
&& || 左结合性
2.表达式 逻辑运算符 表达式
2.5.6 其它运算符和表达式
1.三项条件运算符和表达式
<表达式1>?<表达式2>:<表达式3>
右结合性
2.逗号运算符和表达式
表达式1,表达式2,…,表达式n
“=”优先级高于逗号运算符
3.求字节数运算符
操作对象:类型标识、表达式
2.6 数据类型、运算符与表达式举例
第3章 分支、循环
3.1 分支
3.1.1 if语句
1.if(表达式)语句;
2.if(表达式)
语句1;
else
语句2;
3.if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else if(表达式m)
语句m;
else
语句n;
3.1.2 switch…case语句
switch(表达式){
case 常量表达式1:语句1;
case 常量表达式2:语句2;
…
case 常量表达式n:语句n;
default:语句n+1;
}
1) break语句专用于跳出switch语句
2) case与default顺序可以变动
3) default子句可以省略不用
3.2 循环
3.2.1 while循环
while(表达式){语句};
3.2.2do…while循环
do
{语句};
while(表达式);
3.2.3for循环
for(表达式1:表达式2:表达式3)
{语句};
3.2.4三种循环方式区别
while:已知结束条件
do…while:已知结束条件、至少执行一次
for:已知循环次数
3.3 break与continue
3.3.1 break
跳出switch语句或跳出本层循环
3.3.2 continue
结束本次循环,不跳出循环
第4章 函数、数组、结构体
4.1 函数
分类:(1)从函数定义角度:库函数、用户定义函数
(2)有返回值函数、无返回值函数
(3)从主调函数和被调函数之间数据传送的角度:无参函数、有参函数
4.1.1 函数的作用(代码的复用)
main函数作用:程序的入口
4.1.2 函数的声明与定义
1.先声明再调用
声明:类型说明符 函数名([形参表]);
2.定义:
类型标识符 函数名()
{
声明部分
语句
}
类型标识符 函数名(形式参数表列)
{
声明部分
语句
}
3.形参、实参
形参:在函数定义中
实参:在主调函数中
4.函数返回值
(1)只能通过return语句返回主调函数
(2)函数值类型和函数定义中函数的类型保持一致
(3)不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”
4.1.3 函数的调用
1.调用形式:函数名(实际参数表)
2.调用函数方式:函数表达式、函数语句、函数实参
4.函数的嵌套调用
5.函数的递归调用(Hanoi塔问题)
4.2 数组
4.2.1 一维数组的定义
定义方式:类型说明符 数组名[常量表达式];
4.2.2 一维数组元素的引用
形式:数组名[下标]
4.2.3 一维数组的初始化
形式:类型说明符 数组名[常量表达式]={值,值,…,值};
冒泡排序:
int main(int args,const char *argv[])
{
int array[5] = {8,24,16,19,6};
for(int j = 0;j < 4;j++)
{
for(int i = 0;i < 4 –j;i++)
{
if(array[i] > array[i+ 1])
{
int temp = array[i];
array[i] = array[i +1];
array[i + 1] = temp;
}
}
}
}
4.2.4 二维数组的定义和引用
1.二维数组的定义
类型说明符 数组名[常量表达式1][常量表达式2]
2.二维数组元素的引用
数组名[下标][下标]
3.二维数组的初始化
可按行分段赋值,也可按行连续赋值
4.2.5多维数组
定义形式:类型说明符 数组名[常量表达式1][常量表达式2][常量表达式3]…
4.3 结构体
4.3.1 结构体的作用
数据类型可以不一致
4.3.2 结构体的定义
1.注意最后的分号
struct 结构名
{类型说明符成员名;};
2.结构类型变量的说明
(1)struct stu
{};
struct stu boy1,boy2;
(2)struct stu
{}boy1,boy2;
(3)struct
{}boy1,boy2;
第5章 指针
5.1指针
5.1.1 指针的概念
一个变量的地址称为该变量的“指针”。
如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”。
注意:指针要指向明确地址,指针指向内容要有足够空间。
5.1.2 指针的声明(含指针类型)
基类型 * 指针变量名;
5.1.3 指针的用法
(1)&
(2)*
5.2 指针数组、数组指针
5.2.1 数组指针
数组元素的指针,将数组首元素的地址赋值给指针变量。
5.2.2 指针数组
一个数组,若其元素均为指针类型的数据,称为指针数组。
类型名 *数组名[数组长度];
5.3 结构体指针
一个结构体变量的指针就是该变量所占据的内存段的起始地址。
5.3.1 指向结构体变量的指针
->是指向运算符
(*p).num就是p->num
5.3.2 指向结构体数组元素的指针
5.4 指向指针的指针
第6章 宏、枚举
6.1 宏
6.1.1 宏的概念
原则:原封不动的替换
6.1.2 定义宏及使用
1.不带参数的宏定义
#define 标识符 字符串
2.带参数的宏
#define 宏名(参数表)(字符串)
函数调用在编译后程序运行时进行,并分配内存。宏替换在编译前运行,不分配内存。
6.2 枚举类型
枚举类型是一种基本数据类型,不是构造类型,因为它不能再分解为任何基本类型。
6.2.1 枚举类型的定义和枚举变量的说明
1.形式:enum 枚举名[枚举值表];
2.(1)先定义后说明,(2)同时定义说明,(3)直接说明。
总结三种方式 | 枚举 | 结构体 |
(1) | enum 枚举名{枚举值表}; enum 枚举名a,b,c; | struct 结构名{成员表列}; struct 结构名boy1,boy2; |
(2) | enum 枚举名{枚举值表}a,b,c; | struct 结构名{成员表列}boy1,boy2; |
(3) | enum {枚举值表}a,b,c; | struct {成员表列}boy1,boy2; |
6.2.2 枚举类型变量的赋值和使用
1.枚举值是常量,不是变量,不能赋值。
2.枚举元素本身由系统定义了一个表示序号的数值。从0开始依次往下排。
6.3 typedef、static、const
6.3.1 typedef
定义形式:typedef 原类型名 新类型名;
宏定义是由预处理完成的,typedef是在编译时完成的。
6.3.2 static声明变量
使局部变量的值在函数调用结束后不消失而保留原值,指定为静态局部变量。(在静态存储区内分配存储单元)
6.3.3 const变量
1.不允许改变的变量。
2.const与#define区别:const是运行时内存中实际存在,#define在编译期进行处理。
3.eg:
const int *p =a;//p是指向常量的指针 内容不可以改变
int *const p =a;//p是指针常量 指针不可以改变
const int *constp = a;//p是指向常量的指针常量 内容、指针均不可以改变