指针初阶

文章介绍了指针的基本概念,包括内存单元的地址分配,32位和64位机器上指针的大小。指针类型的差异主要影响解引用操作的权限和指针运算时跳过的字节数量。野指针的出现原因及避免方法被讨论,强调了初始化的重要性。此外,文章还涵盖了指针的加减运算及其在数组和字符串长度计算中的应用。
摘要由CSDN通过智能技术生成

 1.指针是什么

将一块内存划分成若干大小相等的区域(内存单元),给每个内存单元赋予一个编号(地址),便于查找

 对于32位的机器,假设有32根地址线,那么假设每根地址线在寻址的时候产生高电平或低电平(对应0和1)

那么32跟地址线产生的地址就有  2^32 次方个,每个地址标识一个字节,那我们就能对4GB的空间进行编址,

 在32位机器上,地址是由32个0或1组成的二进制序列(32bit位),需要四个字节的空间来储存,因此一个指针变量的大小为4个字节。

64位机器上则为8个字节。

2.指针类型的意义

指针变量的大小与其类型无关

 F10-调试-窗口-内存

 

 造成区别的原因

 

 指针类型决定了指针解引用操作的权限

 造成区别的原因

 int类型指针加1,跳过sizeof(int)即4个字节,char类型指针加1,跳过sizeof(char)即1个字节。

 

 合理的运用指针类型有助于控制用指针访问时想要跳过字节的个数

一个16进制数   转换为   4个二进制位,4个二进制位  就能表示   一个16进制数字。

因此a的大小为32个bit位,即4个字节。 

3.野指针

 3.1野指针出现的原因

局部变量不初始化

 越界访问

 

指针指向的空间被释放 

 出函数的时候函数的空间就被释放了

3.2如何规避野指针

 

后面使用的时候再赋值 

4.指针运算

4.1指针+-整数

 

 编译器编译arr[i]会将其转换为能够识别的*(p+1),因此这两种写法表达是相同的

 4.2指针-指针(相减)

 指针 减 指针 得到的 数的绝对值 是 指针 和 指针 之间的 元素个数。

指针和指针之间进行运算的前提是两个指针都指向同一块空间(即在一个数组中)

 用指针-指针实现求字符串长度的函数my_strlen()函数

4.3指针的关系运算(比较大小)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值