Day 3 :指针

内存

指针和指针变量

指针和指针变量的区别

        指针:       就是内存地址。

        指针变量:用来存放内存地址的变量。

语法及初始化

问题:假设有一指针变量P,&P == &a?

指针的目标和解引用

指针的目标

指针的解应用

问题:如何把变量a的值 + 1?

        1.int *p = &a;

        声明p是指针变量。

        2.*p:指针的目标(内容是数据

        解引用(间接访问)。

回顾问题:

以上:*p的作用可以等同于:

1.a

2.*(&a)

指针的赋值

赋值的形式

指针的大小

        提示1:1字节 = 8byte;1byte = 一个高(or)低电平。

        提示2:指针变量的大小和指针所指向内容的类型无关。

空指针

结论:

1.指针没有初始化(px):地址是随机的有可能不报错。

2.指针如果没有初始化,应像上图中的(py)一样,0地址是一个特殊地址,在一般的操作系统中都是不可被访问的,如果C语言程序员不按规矩(不检查是否等于NULL就去解引用)写代码直接去解引用就一定会触发段错误。

野指针

怎么造成?

1.定义指针但是未初始化且后续未赋值,然后解引用。

2.指针越界访问。

3.指针指向的内存空间释放了。

        上述变量 t 的空间被释放。

危害

如何避免野指针

        指针没有明确的指向一个可用的内存空间(没有初始化,也没有赋值),然后去解引用。

1.定义指针时,同时初始化为NULL。

2.在指针使用之前,将其赋值绑定给一个可用地址空间。

3.在指针解引用之前,先去判断这个指针是不是NULL。

4.小心指针越界。

5.指针使用完后,将其赋值为空。

        段错误

6.避免返回局部变量的地址

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值