19-指针[下]

本文详细讲述了指针的概念,包括指针目标的定义、通过指针修改值的方法,以及指针赋值的不同形式。重点讨论了指针的大小、空指针和野指针的产生原因、危害及避免策略。
摘要由CSDN通过智能技术生成

指针的目标和“解引号”

1.指针的目标

指针指向的内存区域中的数据称为指针的目标

int a =126;

int  *p=&a;

12ce5c693ef54ea2bc20eb718851e9fa.jpg

 

分配给a空间,假如起始地址为fe80,数据是126。为P变量分配内存空间,p存的值为fe80,我们很容易想到就是a的值。a就是p的目标。

问题:如何把变量a的值加1。如何通过指针修改指针的目标?这就涉及到了指针的解引用。

5929325cc9de4a00a9cb0f6fae8f618e.jpg

3d7c0a8026924d198951dae1d5c05b62.jpg 

 b8ef0c1ff94b4a62b538ff3db7e1727a.jpg

 声明一个整型变量a,再声明一个指针变量,取目标地址,想把a的值加1,用*p间接访问a目标。*p++即加1。

示意图:

9eccea1bb3084e9d9c4bb533d063644c.jpg

例题:

bbc7fb62492d44bbad224d98216fb21b.jpg

 答案为B。

指针的赋值

  • 指针的赋值运算指的是通过赋值运算符指向指针变量送一个地址值
  • 向一个指针变量赋值时,送的值必须是地址常量或指针变量,不能是普通的整数
  • 指针赋值运算常见的3种形式

58b1702375c34833afaab1a29f0c771d.jpg

027f68b657b34aa59cf4c33a89bae698.jpg 

 97c80b9a017d47bb84e21d763cddd0e6.jpg

 如果想+1,用a++;*p++;*q++注意加括号。

de5ee9dc0658422a85bee177de3f0d26.jpg

 %p为看指针的内容。

指针的大小

4cde8d3dad404397a573b97a7e676e10.jpg整型数用整型指针,字符型数用字符型指针,字符占一个字节,整型占4个字节,但指针占的字节都是一样的。

 

 空指针

6787aeb1cd6641899d3398cf9e26057e.jpg

67c61c0377c14d44b45468d3aed14391.jpg 

8d437cc83c4f4ad3adb3545d2ed2bc07.jpg 

 

把不定性改为确定性,不能直接*p。

野指针

  • 指针指向的位置不可知(随机的,不确定性的,没有明确指向的)
  • 指向被释放的内存或没有访问权限的内存的指针

野指针怎么造成的?

①指针没有初始化

9386ca571ac64b2bbb2048d08a5c067d.jpg

 

2cce166c035d482c94f1868e399f776a.jpg

 ②指针越界

③指针指向内存空间释放了

aaf3647a5c914d0f8ab8cdc45edc9cb6.jpg

 空间被释放了。

野指针的危害

①段错误

指向不可访问的地址,结果是触发段错误

9e1b87a7323a4c749c5a946ccc423f51.jpg

 37010328b3d24b788ba5ea5200f4ec7e.jpg

32333219707b436d844dadd5fd49d19a.jpg 

 那么我们又该怎么避免野指针呢?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值