听说这是目录哦
内存和地址🫧
内存
电脑上内存是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.
我爱你本来的样子,而不是这个世界希望你成为的样子。
❤️❤️❤️ 恭喜! 恭喜! 闯关成功! ❤️❤️❤️