零基础C语言:第六讲(指针、数组与指针)

240 阅读2分钟

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战

指针

  • 变量:通过变量名访问变量

    • 内存中对应的地址存放变量的值(以字节为单位分配大小),访问时只有编译器知道变量和值之间的对应关系(通过变量和地址的对应关系确定,且变量始终指向首地址)
    • 举例
  • 指针与指针变量

    • 指针是地址,指针变量指的是存储的内容为指针(地址)
    • 定义指针变量:类型名 *指针变量名。(指针变量的类型即为所指向地址存储值的类型)

      • char *pa; 定义一个指向字符型的指针变量
      • int *pb; 定义一个指向整型的指针变量
    • 举例
  • 取地址运算符和取值运算符

    • 如果需要获取某个变量的地址,可以使用取地址运算符(&):char *pa=&a; int *pb=&f;
    • 如果需要访问指针变量指向的数据,可以使用取值运算符(*):printf("%c,%d\n",*pa,*pb);
    • 举例
    • 结果(指针变量存储的是地址,所以都是整型)
  • 注意:避免访问未初始化的指针

    • 举例:a没有初始化而直接赋值会出错,因为此时该指针为野指针 (此时会随机寻找地址进行赋值,非常危险)

数组与指针

  • 虽然数组和指针关系密切,但数组绝对不是指针

    • 举例1(指针使用scanf赋值)
    • 结果1
    • 举例2(数组使用scanf赋值)
    • 结果2
  • 数组的地址连续存放,且大小相同

    • 举例
    • 结果
  • 指向数组的指针

    • 用一个指针指向数组,操作如下

      • char *p;
      • p=a;或者 p=&a[0];
  • 指针的运算

    • 当指针指向数组元素的时候,可以对指针变量进行加减运算,这样做的意义相当于指向距离指针所在位置向前或向后第n个元素

      • 举例
      • 结果
    • 对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法
    • 需要强调:p+1不是简单的将地址加1,而是指向数组的下一个元素(为什么?因为在定义指针的时候便定义了指针的类型,指针加1代表该类型所占地址加1)

      • 举例
      • 结果
  • 使用指针定义,再使用数组访问

    • 举例
    • 结果
  • 注意:数组名其实是数组第一个元素的地址

    • 举例
    • 结果(数组名和数组第一个元素的地址相同)