指针的理解(1)
一.内存和指针1.内存1内存就是一大块可以按字节编号的连续空间地址从低到高连续排列内存空间将内存划分为⼀个个的内存单元每个内存单元的⼤⼩取1个字节2指针地址3For example一栋宿舍就相当于内存房间编号就相当于地址写个房间编号的一张纸条就是指针2.究竟该如何理解编址1CPU与内存之间通过数据总线地址总线控制总线等等相互连接起来执行命令2计算机中的编址并不是把每个字节的地址记录下来⽽是通过硬件设计完成的。就相当于钢琴人们在弹奏是知道哪个键是那个音所以编址不算进内存里面3. 指针变量和地址1取地址操作符变量的创建会向内存申请空间比如int类型的变量就会像内存申请4个字节的空间创建之后就会产生地址这个符号就可以知道变量的地址我们输入a就可以得到a给出的是 a 所占 4 个字节中最低地址那一个也就是首地址a的 4 个字节是连续的编译器保证。所以第 2、3、4 个字节的地址不用存直接算出来就是 0x1001 / 0x1002 / 0x10032.指针变量我们通过取地址操作符()拿到的地址是⼀个数值这个数值有时候也是要存储起来⽅便后期再使⽤的那我们把这样的地址值存放在指针变量中地址 内容宿舍例子里纸上写的 302指针变量 装这个内容的盒子纸片本身抽屉指针变量里装着那张写着 302 的纸条指针纸条上写的是房间号地址3拆解指针类型int* pa表示p是指针变量int 是指p是指向的是整型int类型的对象如果我想去存一个char类型的指针呢4解引⽤操作符p是用这个地址找到东西。p → 0x1000 地址本身p → 10 地址上的东西 ← 翻译的结果要拿地址是 p要拿东西才是pp 99 改的是房间里那个东西纸条上的地址一个字都没动改纸条上的地址是另一条语句那是 p y5.指针变量的大小在x64上在x86上32位平台下地址是32个bit位指针变量⼤⼩是4个字节64位平台下地址是64个bit位指针变量⼤⼩是8个字节所以指针变量的⼤⼩和类型是⽆关的只要指针类型的变量在相同的平台下⼤⼩都是相同的4.指针变量类型的意义1指针的解引⽤指针的类型决定了对指针解引⽤的时候有多⼤的权限⼀次能操作⼏个字节2指针±整数当指针整数的时候指针的类型决定了指指针向前或者向后⾛⼀步有多⼤距离指针-整数同理3void指针将⼀个int类型的变量的地址赋值给⼀个char类型的指针变量编译器给出了⼀个警告是因为类型不兼容void类型就不会有这样的问题void类型的指针可以接收不同类型的地址但是⽆法直接进⾏指针运算4.指针± 整数12指针-指针指针的减法可以计算中间个数的差值3指针的关系运算1在同一数组中2数组遍历的标准写法3空指针判断4不同数组不可以比大小