1.计算机的数据及其类型
进制转换、数值数据、非数值数据
非数值数据:字符、图片、ASCLL表等
数值数据:可以直接进行运算的数据 二进制、八进制、十进制、十六进制
二进制: 0~1(逢二进1)八进制:0~7(逢八进1)十六进制:0 ~9、a~ f(A~F)(逢16进1)
为了区分不同的进制:八进制前加0,十六进制前0x(0X)(0x7fa 0X7FA)
进制转换:其他进制转十进制:(注意:从右往左:从0次幂开始)
从十进制转其他进制:
十进制转二进制:除2倒取余数
十进制转八进制:除8倒取余数
十进制转十六进制:除16倒取余数
数据类型
关键字:系统预先定义好的,有特殊含义的,并且都是小写,不能重新定义
数据类型:char、short、int、long、float、double、enum、union、struct、void
sizeof:计算所占内存空间的大小:单位:字节
标识符:程序员自己定义的,一般用来定义变量名,函数名,类
float(单精度浮点数):表示6~7位有效数据
double(双精度浮点数):表示15~16位有效数据
常量、变量
宏:#define 宏名 表达式
注意:1、宏名一般用大写表示,小写也可以,因为要和普通的变量区分开来,所以用大写
2、宏后没有分号 宏只是一个单纯的替换!!!
局部变量:定义在函数体(任何函数体内)内的变量,存储在静态区
全局变量:定义在函数体外的变量,存储在栈区
存储类型:auto、static、extern、register
auto:修饰局部变量,修饰的变量存储在栈区
extern:修饰全局变量,修饰的变量存储在静态区
static:既可以修饰局部变量,也可以修饰全局变量,修饰的变量存储在静态区
修饰局部变量时,延长局部变量的生命周期,如果局部变量没有初始化,其值为0;如果初始化了,则只能初始化一次;(延长了生命周期,但是并没有延长作用域!!)
修饰全局变量时,限制作用域,该变量只能在本文件内使用
register:修饰局部变量,存储在寄存器中;
运算符
算术运算符:%:取余
注意:不能用于浮点数(++在前:先自加,在赋值,++在后:先赋值,在自加)
关系运算符:比较两者之间的关系,结果为(真1或者假0)(> < >= <= == !=)
逻辑运算符:&& 表达式1 && 表达式2
截断法则:有一个为假,结果就为假;前一个为假,后面就不在进行运算了
|| 表达式1 || 表达式2
截断法则:有一个为真,结果就为真,前一个为真,后面就不在进行运算
三目运算符:表达式1 ? 表达式2 :表达式3
判断表达式1是否成立,如果成立,就将表达式2的值作为整个表达式的值,否则, 就将表达式3的值作为整个表达式的值
逗号运算符:表达式1,表达式2,表达式3,。。。。。,表达式n
从左往右,依次去执行每个表达式,最后将表达式n的值作为整个表达式的值
注意:逗号运算符的优先级是最低的,因此在使用时要加上括号
位运算符: & | ~ ^ << >>
按位与:& 都为1,才为1,有一个为0,就为0
按位或 :| 都为0,才为0,有一个为1,就为1
按位取反:~ 1变0, 0变1
异或:^ 相同为0,不同为1
左移:<<
无符号数:高位丢弃,低位补0
有符号数:符号位不变,高位丢弃,低位补零
右移:>>
无符号数:低位丢弃,高位补0:
有符号数:符号位不变,低位丢弃,高位补(0正,1负)
输入输出
函数:有独立功能的模块
标准的输入输出函数:scanf、printf(对输入以及输出的变量的类型没有限制)
输入:将键盘输入数据拷贝到内存中
Scanf(“格式控制串”,地址表);
格式控制串:原样输入的内容+格式化符
&+变量名://获取该变量的地址
输出:将内存中的数据打印至终端
printf(“格式控制串”,输出表);
格式控制串:原样输出的内容+格式化符
输出表:输出的内容
(格式化符要和输出表一一对应)
数据的三大结构
三大结构:顺序结构、选择结构、循环结构
顺序结构:语句按照一定的先后顺序去执行
选择结构:
单分支if选择结构:先判断表达式是否成立,如果成立,就执行语句。
双分支if选择结构:先判断表达式是否成立,如果成立,则执行语句1,否则,执行语句2;
switch语句:
- 表达式不能为float类型
- 标号必须为常量
- 当表达式等于标号时,就冒号后面的语句,直到switch,case语句结束为止,或者遇到break语句结束。
- switch,case语句是否结束)
- 是否遇到了break(break:1、结束switch,case语句 2、跳出循环(结束循环))
循环结构:循环的起始条件、循环的终止条件、循环变量的变化
for循环:表达式1:循环的起始条件表达式、2:循环的终止条件表达式、3:循环变量的变化
先执行表达式1,然后执行表达式2,如果表达式2为真,执行循环体,然后执行表达式3;如此反复,当表达式2为假时,结束循环
while语句:判断表达式是否成立,如果成立,就执行循环体,反之,跳出循环
()
数组
数组的概念:一组数据类型相同的元素组和在一起
特点:1、数据类型相同 2、地址连续
数组名:1、整个数组
2、数组首元素的地址 arr == &arr[0] (获取一个变量的地址:&+变量名)
数组的初始化:数组定义在函数体内,并且用static进行修饰,里面的所有元素为0(静态局部变)
数组定义在函数体内,如果没有进行初始化,里面的所有元素是随机值(局部变量)
数组定义在函数体外,如果没有进行初始化,里面的所有元素为0(全局变量)
二维数组:一组数组的元素组和在一起
特点:1、数据类型相同 2、地址连续 (一维数组的元素的类型以及个数必须相同)
函数
函数是具有独立功能的模块
使用函数是为了提高代码的复用率,让程序变得模块化、简洁
指针
指针是一种数据类型,它是一种保存地址的数据类型,
内存分配的最小单元:字节
每一个字节都有一个编号,我们把这个编号就叫做地址
地址的本质:内存单元的编号
指针:指针就是地址
指针的本质:内存单元的编号
存储类型 数据类型 * 指针变量名; Int * p;
//定义了一个指针变量p,p用是用来保存(谁的(int)地址)地址
数据类型:指针指向的数据类型(指针保存的是什么数据类型的变量的地址)
指针的数据类型:int *
指针的赋值相当于改变指针的指向(指针赋值时要注意 指针指向的数据类型必须相同)
二级指针:保存一级指针的地址
存储类型 数据类型 *指针变量名; Int * *pp;
数据类型:指针指向的数据类型;(二级指针指向的数据类型:一级指针的数据类型)(int *)
二级指针的数据类型:int **;