1.calloc和realloc
- calloc和malloc一样都是在堆区分配内存
- 不同点在于calloc会将分配的内存初始化为0
- realloc 重新在堆区分配内存
- 如果分配的内存比原来大,这个时候有两种情况出现
- 原有空间后续有足够大的空间,那么直接在原有空间后继续开辟内存返回原有空间的首地址
- 原有空间后续没有足够大空闲空间,会重新分配一个足够大的空间,并且将原有空间的内容拷贝到新空间下,释放原有空间,将新空间的首地址返回
2.sscanf的使用
- 将已知的字符串通过格式化匹配出有效信息
格式 | 作用 |
---|---|
%*s或%*d | 跳过数据 |
%[width]s | 跳过指定宽度的数据 |
%[a-z] | 匹配a到z中任意字符(尽可能多的匹配) |
%[aBc] | 匹配a,B,c中一员,贪婪性 |
%[ ^a] | 匹配非a的任意字符,贪婪性 |
%[ ^a-z] | 读取除a-z以外的所有字符 |
- 案例
- 匹配char *ip = “127.0.0.1”将中间数字匹配到num1~num4中
- 字符串char *str = “abcde#zhangtao@12345”中间的zhangtao匹配出来
3.匹配字串
- 实现自己的查找子串功能,在字符串中查找对应的子串,如果有返回字符串第一个字母的位置
- 如果没有返回-1
4.指针的易错点
- 指针容易越界操作
- 指针叠加会不断改变指针指向
- 返回局部变量地址
- 不可以释放野指针
5.const的使用场景
- 用来修饰函数中的形参,防止误操作
6.二级指针做函数参数的输入输出特性
输入特性
- 在主调函数分配内存,被调函数使用
- 在堆区创建
- 在栈区创建
输出特性
- 在被调函数中分配内存,主调函数使用
7.二级指针练习-文件读写
- 需求:从文件中读取数据,并且将数据存放到堆区的数组中
- char **pArray = malloc(sizeof(char *) * len)
- 获取有效行数
- 将文件光标置为文件首fseek ( file,0,SEEK_SET)
- 读取文件数据并放入到pArray中
- 显示数组pArray
- 释放数组pArray
8.位运算
- 按位取反 ~ 0变1 1变0
- 按位与 & 全为1为1, 有0为0
- 按位或 | 全为0为0,有1为1
- 按位异或 ^ 相同为0 不同为1
9.移位运算符
左移 <<
- <<x 等价于 乘2的x次方,用0填充位
右移 >>
- 相当于 除以2的x次方,如果有符号,不同的机器可能有不同