突破•指针一

内存和地址🫧

内存

电脑上内存是8GB/16GB/32GB等。
内存-----弟弟的房子🏠

地址

地址-----弟弟家的门牌号
内存单元的编号 == 地址 == 指针

指针变量和地址🫧

取地址操作符(&)

创建变量就是向内存申请空间,然后内存哥哥会给每个变量弟弟一个号码牌(地址)【这样晚上的时候皇上就可以翻牌子了,嘿嘿】。
地址就是长成下面这些样子的:
在这里插入图片描述

指针变量

地址存放在指针变量中。
存在指针变量里的都会被理解为地址。

理解 int* 某

在这里插入图片描述

*说明pa是指针变量。

int说明pa指向的地址【a的类型】是整型。

解引用操作符(*)

解引用操作符*是车,可以去到目的地(地址)。请添加图片描述

指针变量的大小

  • 32位平台下地址是32个bit位,指针变量大小是4个字节
  • 64位平台下地址是64个bit位,指针变量大小是8个字节
  • 指针变量的大小和类型是无关的,只要指针类型的变量,在相同的平台下,大小都是相同的。

指针变量类型的意义🫧

对地址进行加减时,指针变量的类型决定你可以操作几个字节以及你每次可以跳过几个字节,即指针的类型决定了指针向前或者向后走一步有多大(距离)。

指针±整数

  • 若有char* pc,且pc=00AFF974,那么pc+1=00AFF975,即char*类型的指针跳过了1个字节。
  • 若有int* pi,且pi=00AFF974,那么pi+1=00AFF978,即int*类型的指针跳过了4个字节。

void* 指针

void* 可以理解为无具体类型的指针(或者叫泛型指针),这种类型的指针可以用来接受任意类型地址。但是也有局限性, void* 类型的指针不能直接进行指针的±整数和解引用的运算(因为不知道要跳过和访问几个字节)。
void* 玩得花,来者不拒,中央空调。

const修饰指针变量🫧

指针变量本身是地址,指针指向的内容是解引用后的。

  • const如果放在*的左边,如int const * p,修饰的是指针指向的内容(*解引用后的,如*p = 20),保证指针指向的内容不能通过指针来改变。但是指针变量本身的内容(指针变量存放的是地址,如p = &m)可变。
  • 【省流:跟上面的反过来】const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。

指针运算🫧

指针±整数

在这里插入图片描述

指针-指针

类比日期的减法,如2024年2月16日 减 2024年2月6日 的结果是10天,差值是10。
没有指针+指针,类比两个日期相加没有意义,2024年2月16日 加 2024年2月6日 的结果没意义。

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

指针是可以比较大小的,数组的下标越大,地址越高。

能量站😚

I love you for who you are, not who the world wants you to be.
我爱你本来的样子,而不是这个世界希望你成为的样子。

❤️❤️❤️ 恭喜! 恭喜! 闯关成功! ❤️❤️❤️

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值