char sex; };
int main (void) { struct Student st = {80, 66.6, 'F'};//初始化 定义的同时赋初值
struct Student * pst = &st; //&st不能改成st pst->age = 88;//第二种方式 st.age = 10; //第一种方式
return 0; }
1.pst—>在计算机内部会被转换成 (*pst).age, 没有什么为什么,这就是—>的含义,这也是一种硬性规定
2.所以 pst—>age等价于(*pst).age也等价于st.age
3.我们之所以知道pst—>age等价于st.age,是因为pst—>age是被转化成了(*pst).age来执行
4.pst—>age 的含义:
pst所指向的那个结构体变量中的age这个成员
结构体变量和结构体变量指针作为函数参数传递的问题
推荐使用结构体指针变量作为函数参数来传递 结构体变量的运算
结构体变量不能相加,不能相减,也不能互相乘除 但结构体变量可以相互赋值 例子:
struct Student { int age; char sex; char name[100]; };//分号不能省
struct Student st1, st2;
st1+st2 st1*st2 st1/st2 都是错误的 st1 = st2 或者 st2 = st1 都是正确的
举例
动态构造存放学生信息的结构体数组
动态构造一个数组,存放学生的信息 然后按分数排序输出 链表:
枚举
什么是枚举
把一个事物所有可能的取值一一列举出来 怎样使用枚举
枚举的优缺点
代码更安全
书写麻烦
位运算符:
& ————按位于
&& 逻辑与 也叫并且 &&与& 的含义完全不同 1&1 = 1 1&0 = 0 0&1 = 0 0&0 = 0
5&7=5 21&7=5 5&1=1 5&10 = 0 |
|| 逻辑或 | 按位或
1|0 = 1 1|1 = 1 0|1 = 1 0|0 =0
~————按位取反
~i就是把i变量所有的二进制位取反^————按位异或
相同为零 不同为1 1^0 = 1 0^1 = 1 1^1 = 0 0^0 = 0
<<————按位左移
i<<3表示把i的所有二进制位左移3位,右边补零 左移n位相当于乘以2的n次方 面试题:
A)i = i*8 B)i = i<<3;
请问上述两个语句,哪个语句执行的速度快 答案: B快
>>————按位右移
I>>3表示把i的所有二进制位右移3位,左边一般是0,当然也可能补1
右移n位相当于除以2的n次方,前提是数据不能丢失 面试题:
A)i = i/8 B)i = i>>3;
请问上述两个语句,哪个语句执行的速度快 答案: B快
位运算的现实意义
通过位运算符我们可以对数据的操作精确到每一位
专题:
补码:
原码
也叫 符号-绝对值码
最高位0表示正 1表示负,其余二进制位是该数字的绝对值的二进制位
原吗简单易懂 加减运算复杂
存在加减乘除四种运算,增加了cpu的复杂度 零的表示不唯一 反码
反码运算不便,也没有在计算机中应用 移码
移码表示数值平移n位,n称为移码量 移码主要用于浮点数的阶码的存储 补码
已知十进制求二进制
正整数转二进制
除2取余,直至商为零,余数倒序排序
负整数转二进制
先求与该负数线对应的正整数的补码,然后将所有位取反,末尾加1, 不够位数时,左边补1
零转二进制
全是零
已知二进制求十进制
如果首位是0,则表明是正整数,按普通方法来求
如果首位是1,则表明是负整数
将所有位取反,末尾加1,所得数字就是该负数的绝对值
如果全是零,则对应的十进制数字就是零
学习目标:
在VC++6.0中一个int类型的变量所能存储的数字的范围是多少
int类型变量所能存储的最大正数十六进制是:7FFFFFFF
int类型变量所能存储的绝对值最大的负整数用十六进制表示是:80000000
具体可以参见“8位二进制所代表的十进制 示意图.jpg” 最小负数的二进制代码是多少 最大正数的二进制代码是多少
已知一个整数的二进制代码求出原始的数字 数字超过最大正数会怎样 不同类型数据的相互转化
进制的转化 字符串的处理 链表
算法:
通俗定义:
解题的方法和步骤 狭义定义:
对存储数据的操作
对不同的存储结果,要完成某一个功能所执行的操作是不一样的
比如:
要输出数组中所有的元素的操作和
要输出链表中所有元素的操作肯定是不一样的 这说明:
算法是依附于存储结构的
不同的存储结构,所执行的算法是不一样的
广义定义:
广义的算法也叫泛型
无论数据是如何存储的,对数据的操作都是一样的
我们至少可以通过两种结构来存储数据
数组
优点:
存取速度快 缺点:
需要一个连续的很大是内存 插入和删除元素的效率很低
链表
专业术语:
头结点
头结点的数据类型和首结点的类型一模一样 头结点是首结点前面的那个结点 头结点并不存放有效数据
设置头结点的目的是为了方便对链表的操作 头指针
存放头结点地址的指针变量 首节点
存放第一个有效数据的结点 尾节点
存放最后一个有效数据的结点
确定一个链表需要一个参数
头指针
优点:
插入删除元素效率高
不需要一个连续的很大的内存 缺点:
查找某个位置的元素效率低
二进制全部为零的含义 - -0000000000000的含义
1. 数值零
2. 字符串结束标记符'\\0' 3. 空指针NULL
NULL表示的是零,而这个零不代表数字零,而表示的是内存单元的标号
我们计算机规定了,以零为编号的存储单元的内容不可读,不可写