第15课【指针】定义 运算 大小 类型 解引用

基本知识框架

在这里插入图片描述

课堂笔记

  • 关于指针
    • 指针是用于存放地址的变量,通过指针可以为宜标示一块地址空间
    • 不同数据类型的指针大小根据不同的平台,分为4字节和8字节,那么指针类型的意义是什么?
      • 指针+/-整数时的步长,会因为指针类型的不同而不同
      • 指针的类型决定了对指针进行解引用操作的权限大小(指针能操作的字节数)。例如int a = 1000,分别用char* pa1和int* pa2去获得变量a的地址, 他们能得到的地址都是一样的,但是当我们进行解引用操作时,*(char* pa1)与*(int* pa2)得到的值是完全不一样的。
    • 野指针的成因及如何规避野指针
      • 成因:
        • 指针未初始化
        • 指针越界访问
        • 指针指向空间释放(例如,在主函数中调用一个函数,在函数中创建一个变量,以该变量的地址作为返回值,这类的操作是错误的,当函数执行完毕后,创建的临时变量已经被销毁,再返回其地址已无任何意义)
      • 规避方法:
        • 指针要初始化
        • 注意指针越界访问
        • 指针空间释放后,及时置NULL
        • 指针使用前检查有效性
    • 指针的运算
      • 虽然指针也是一种变量,但并不是所有的运算符都可以用于指针
      • 为了更清晰的描述指针的运算,以下的解释都是在数组int arr [10]的基础上进行讨论,但是并不是说指针运算只能用于数组
      • 指针+/-整数
        • 对于数组,&arr [5] + 1 = &arr [6],&arr [5] - 1 = &arr [4] ,可以很容易的看出在数组中数组元素指针 +/- 整数n = 另一个指针,指向当前数组元素之前或之后n个元素。从地址上看,原数组元素地址 +/- n*数组元素类型的字节大小 = 另一个元素的地址
      • 指针 - 指针
        • 对于数组,&arr [9] + &arr [0] = 9,&arr [0] - &arr [9] = -9,可以很容易的看出两个数组元素的地址相减,得到的是这两个元素之间相差的元素个数。更通用的说法,两个同种数据类型的指针相减,得到的是这两个地址之间能存放的该类型数据的个数
      • 指针大小的比较
        • 单纯的比较指针地址的大小,对于数组,&arr [9] > &arr [0]
    • 指针与数组的联系
      • & + 数组名,这里的地址和该数组的首元素地址在数值上一样,但这里的地址值的是数组的地址
      • sizeof(数组名)计算的是整个数组的大小
      • arr,&arr [0],&arr在数值上都一样,但三者的意义并不相同:
        • arr指的是数组首元素的地址,arr + 1指向它下一个元素的地址
        • &arr [0]也指的是数组首元素的地址,arr + 1指向它下一个元素的地址
        • &arr指的是数组的地址,&arr + 1指向数组之后的地址
    • 二级指针:指针的指针被称为二级指针,因为指针也是一种变量,所以理所当然的也会占用存储空间,所以也就可以用二级指针去存储指针的地址。例如int a = 10,int* pa = &a,int** ppa = &pa,int** = int* *
    • 指针数组和数组指针:
      • 指针数组:由指针变量组成的数组,如int* arr [10]
      • 数组指针:顾名思义,就是数组的指针

基本知识框架Xmind文件下载

链接: 资源下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值