指针使用

指针应用场景

指针应用场景一:
交换两个变量的值
指针应用场景二:
函数返回多个值,某些值就只能通过指针返回
传入的参数实际上是需要保存带回的结果的变量
指针应用场景二b:
函数返回运算状态,结果通过指针返回
常用套路是让函数返回不属于有效范围内的值来表示出错
-1,0(文件操作中的例子)
当任何数值都是有效的可能结果是,就需要分开返回
常见错误:
定义指针之后未赋值就开始使用
指针未赋初值时不知道指向哪里,不可控

再探数组:

函数参数表中数组是指针 —
void minmax(int a[], int len, int *max, int *min)
void minmax(int *a, int len, int *max, int *min)
以下四种函数原型是等价的:
image.png
数组变量是特殊的指针:
数组变量本身表达地址:
image.png
[ ]运算符可以对数组做,也可以对指针做:
p[0] <==> a[0]
运算可以对指针做,也可以对数组做:
a = 25
数组变量是const的指针,所以不能被赋值

指针与const

指针是const

image.png

所指的是const

image.png
不能通过 P 去修改 i
但i和p可以被修改

判断

image.png

  • const在 前面表示,*指针所指的东西不能被修改,即,不能通过指针去修改指针指向的变量
  • const在 * 后面表示, 指针不能被修改,即,指针不能再指向别的变量

    转换

    image.png

    const数组

    防止数组被修改
    image.png
    image.png

    指针运算

  • 指针+1 = 指针地址+sizeof(指针类型) 将指针移到下一个单元

  • image.png
  • image.png
  • 遍历方法:*p++
    • image.png
  • 指针比较:
    • image.png
  • 0地址:
    • image.png
  • 指针的类型
    • image.png
  • 指针类型转换
    • image.png
  • 指针作用

    • image.png

      动态内存申请

  • 输入数据

    • image.png
    • 动态内存分配
    • image.png
  • malloc
    • image.png
  • 没空间?
    • image.png
  • 常见问题:

    • image.png
    • 有malloc就有free
    • 保证有恰当时机free

      字符串操作

  • putchar

    • image.png
  • getchar
    • image.png
  • shell 读写缓冲区
  • 字符串数组
    • char[ ][10]
    • char *a[ ]
    • image.png
  • 程序参数 — main函数

    • image.png
    • busybox

      字符串函数的实现

  • string.h

    • image.png

      strlen 字符串长度

      image.png

      strcmp 字符串比较

      image.png
      字符串不能直接比较

      strcpy 字符串拷贝

      image.png
      复制一个字符串
      image.png
      不要忘了+1

      找找问题在哪~ **
      image.png image.png ```c

      include

      include

      include

//问题,无法全部复制 char mycmp(char dst, const char src) { int idx = 0; while(src[idx]) { dst[idx] = src[idx]; idx++; //printf(“dst[idx]=%s\n”,dst[idx]); } dst[idx] = ‘\0’; return dst; } char mycmp2(char dst,const char src) { char ret = dst; while(src)//scr当前位不等于零 { dst++ = src++; } *dst = ‘\0’; return ret; }

char mycmp3(char dst,const char src) { char ret = dst; while(dst++ = src++)//scr当前位不等于零 ; *dst = ‘\0’; return ret; } int main() { char s[] = “abcdefg”; char ss[] = “abcdefg”; char sss[] = “abcdefg”;

  1. char s1[] = "";
  2. char s2[] = "";
  3. char s3[] = "";
  4. strcpy(s1,s);
  5. printf("s1=%s\n",s1);
  6. mycmp(s2,ss);
  7. printf("s2=%s\n",s2);
  8. mycmp(s3,sss);
  9. printf("s3=%s\n",s3);
  10. return 0;

}

```

字符串找字符 strchr

image.png

字符串找字符串

image.png