了解指针类型的意义

        目录

1、意义一:决定解引用时访问多少个字节

2、意义二:决定指针访问的步长

3、总结


指针是内存中最小单元的编号,也就是地址。我们平时口语说的指针,其实是指针变量,一个用于保存内存地址的变量,存在指针变量中的值都会被当作地址处理

那直接定义一种 用于保存地址的类型不就好了,为什么会有现在这样不同类型的指针?

1、意义一:决定解引用时访问多少个字节

int n = 0x11223344;

int* ptr1 = &n;             // *ptr1 = ? 
char* ptr2 = (char*)&n;     // *ptr2 = ?  

这种情况下,ptr1 和 ptr2 的地址肯定是一样的,不看类型的话,两者保存的都是 n 的地址,因为指针变量就是用来保存地址的。

下面要对 ptr1 和 ptr2 做解引用操作,

int* :解引用时每次可以访问 4 个字节,所以可以访问到全部字节

 char* :解引用时每次只能访问 1 个字节,所以只能访问到第一个字节

 因此,指针的类型决定了对指针引用的时候,一次能访问多少个字节

2、意义二:决定指针访问的步长

从上面我们知道指针类型的第一个意义在于解引用时可以访问多少个字节,那如果指针要向后移动一个单位,即 ptr2 + 1,此时会移动多少个字节呢??

long n = 0x11223344;

int* ptr1 = (int*)&n;       // *(ptr1 + 1) = ? 
char* ptr2 = (char*)&n;     // *(ptr2 + 1) = ?   

不移动时的解引用情况如下:

移动一个单位以后解引用时,我们将解引用的结果打印出来,发现ptr1 向后移动了 4 个字节,ptr2向后移动了 1 个字节。

 因此,指针类型的第二个意义就是,决定了向前或者向后走一步的长度是多少,int类型是 4 个字节,char类型是1 个字节。

3、总结

指针类型不会改变变量在内存中的存储方式(不会因为将地址存到char* 类型的指针变量,地址指向的内容就发生截短)

指针类型改变的是看待这个变量的方式,将地址赋值给char*类型,说明要以char类型的视角来看待这个地址指向的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值