指针的复习
将下面的字符串按字母顺序(从小到大)排序
指向指针的指针
char **p;结合性从从右到左
int *p[n] 数组指针
int (*p)[n] 指针数组
如果俩个指针变量都指向同一个数组中的元素,则两个指针变量值至差就是俩个指针之间的元素个数
如果俩个指针变量都指向同一个数组中的元素,则可以进行比较。指向前面的元素的指针变量小于指向后面的元素的指针变量。
void *p 表示指针变量p不指向一个确定的类型,他的作用仅仅是存放一个地址。void指针它可以指向任何类型数据
const,可以改变str的值,但不可以改变指向
不可以改变,只读的
输出所有的学生的成绩,用指针函数
指针函数和函数指针(是指向函数的指针变量,int(*p)(int,int))
宏定义
预处理命令,源文件的前面
加上#undef 名字作用域就取消了
宏定义表示数据类型
宏定义和typedef的区别
宏定义只是简单的字符串替换,是在预处理完成的,而typedef是在编译时处理的
带参数的宏定义
条件编译
结构体
结构体指针
结构体变量做函数参数
通过print输出学生的信息
结构体指针变量做函数参数
动态存储分配
1.分配内存空间函数:malloc,calloc
2.释放内存空间函数:free
链表
链表的组成
1.头指针:存放一个地址,该地址指向第一个元素。
2.结点:用户需要的实际数据和链接节点的指针
建立链表
静态链表
动态链表
创建
输出
删除
插入
typedef定义类型
表明结构体类型
声明整形数组类型
typedef int count;和# define count int
#define是在预编译时处理的,他只是简单的字符串替换,而typedef是在编译时处理的。
位处理
按位与&
1.清零 将1110 0101的第二位清零
1110 0101
& 1111 1011
1110 0001
2.取一个数中某些指定为(例:取出低八位)
按位或|
将大写字母转化为小写字母,小写字母转换为大写字母
异或^
同号为0,异号为1
1.使特定位反转
2.与0异或,保留原值
3.交换两个值,不需要临时变量
a=a^b; b=b^a; a=a^b;
取反~
单目运算符
左移运算符<<
a=<<2,将a的二进制值左移两位,右边补0,左移n次就×2的n次方(此结论只适用于该数左移时被溢出舍弃高位中不包含1的情况)。
右移运算符>>
低位舍弃,高位补0,右移n次就/2的n次方(此结论只适用于该数右移时被溢出舍弃高位中不包含1的情况)。注意符号问题,看自己编译系统。
位段
1.位段成员的类型必须指定为unsigned或int
2.若某一位短段要从另一个字开始存放
unsigned a:1
unsigned b:2 一个存储单元
unsigned :0
unsigned c:3 另一个存储单元