c语言提高day03

1.calloc和realloc

  • calloc和malloc一样都是在堆区分配内存
  • 不同点在于calloc会将分配的内存初始化为0
  • realloc 重新在堆区分配内存
    1. 如果分配的内存比原来大,这个时候有两种情况出现
    2. 原有空间后续有足够大的空间,那么直接在原有空间后继续开辟内存返回原有空间的首地址
    3. 原有空间后续没有足够大空闲空间,会重新分配一个足够大的空间,并且将原有空间的内容拷贝到新空间下,释放原有空间,将新空间的首地址返回

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)
  1. 获取有效行数
  2. 将文件光标置为文件首fseek ( file,0,SEEK_SET)
  3. 读取文件数据并放入到pArray中
  4. 显示数组pArray
  5. 释放数组pArray

8.位运算

  1. 按位取反 ~ 0变1 1变0
  2. 按位与 & 全为1为1, 有0为0
  3. 按位或 | 全为0为0,有1为1
  4. 按位异或 ^ 相同为0 不同为1

9.移位运算符

  • 左移 <<

    • <<x 等价于 乘2的x次方,用0填充位
  • 右移 >>

    • 相当于 除以2的x次方,如果有符号,不同的机器可能有不同
你的支持是我最大的动力!
0%