指针 指针偏移 指针类型

        在创建一个变量的时候,系统都会为其分配一个地址来证明它存在于内存之中。

        指针就是一个很好的帮助你在内存中找到那些变量的工具。指针的内容一般都是来存这个变量的首地址的。

你可以对指针进行解引用来知道这个指针内容的内容。指针的内容为a的地址,a地址的内容为10

        为什么会叫解引用呢?我的理解是:引用其实就是引用该变量的地址所以用取址符&来引用a,解引用就是把这个引用解除 *&a就会变成a,那解引用出来的就是a。这样对指针p进行解引用的话得出来的就是a这个解引用就是为指针而设计的。你可能会好奇那我直接 *&a岂不就是a,没错,&a你也可以看成是一个指针。*p把p展开也就是*&a。

那指针为什么会有char*类型指针  int*类型指针   void*类型指针呢?

        其实定义什么类型的指针是为了告诉编译器以哪种方式类型来解引用获得真正的内容

这种就是不知道以哪种方式来解引用就会报错,如果定义错的类型来解引用也是可以骗过vs这个编译器的,但是最后解出来的内容就会根据你指针的类型来解。

 这里我定义了一个struct结构体,也就是相当于我自己创建的一个类型。我用int*来接收没有用相应类型struct*接收,因为struct类型的前四个字节是int a ;指针指向的是temp的首地址,用int方式解出来就是a的值10,而不是整个结构体的内容。当你知道struct类型在内存中的地址顺序时候,你就可以通过指针偏移然后用相对应的指针类型来解出你想要的值。

所以定义指针的时候一定要与指向类型相对应,这样才能正确的解引用解出来。

指针偏移就是通过指针++ -- 或者+n -n的方式让它指向的位置进行移动。就像一个指针一样,本来指着这然后指着那。什么类型的指针偏移+1就是偏移一个这个类型的。

         这里我改变了一下指针的类型,改成了char。char为1字节,那么+1就是向后偏移1个字节加4就是偏移4个字节,因为int是4字节所以我直接偏移了4个字节到了b的地址地方,再用相应类型的指针解引用就求出了e。其他可以依次类推。

 

 

                                        

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值