指针初阶一

  • 总括


    代码调试非常重要呀
    一个程序员30-40%写代码
    剩下的时间调试代码
    能看出你的问题
    写三子琪
    绩效分有多少bug
    自己写bug,自己找bug,自己改代码

  • 指针是什么


    讲到内存单元的编号,地址单元的地址,就是指针
    内存单元的编号 == 内存单元的地址==指针
    为了管理内存,进行改革为一个一个内存单元,一个个字节
    为了管理内存单元,对单元进行编号
    一个地址能找到一个内存单元,即指向
    内存单元编号怎么产生:
    32位机器通电 ---32个01组成的二进制序列
    0000000000000000000000000000000000000000
    .....

    1111111111111111111111111111111111111111
    int a =10;
    a一定在内存中创建空间,之后就有自己的地址
    10占四个字节空间
    每个字节有一个内存单元编号
    理论上10应该有四个字节
    但是呢我们用四个地址去访问她比较麻烦
    所以当我们在这取地址a时;拿到的是a的四个字节中第一个字节的地址
    现在你要把她存起来;pa就是一个指针变量
    指针变量的类型是int
    int *就可以了 这颗*说明了pa是指针变量
    int说明了pa指向的对象a是整形类型
    *pa可以找到a
    *pa = 20;

    编号>>地址>>指针
    这里地址存起来要一个变量,这个变量是用来存放地址的
    也是用来存放指针的
    存放地址的就是指针
    所以我们把这个存放地址的变量称为指针变量

    • 总结


      指针就是变量,用来存放地址的变量(存放在指针中的值都被当成地址处理)
      那么有几个问题:一个小的单元到底是多大? 一个字节

      总结:内存被划分为一个一个小的内存单元,一个内存单元是一个字节,然后每个内存单元要进行内存编号,编号要存起来,就印出来指针变量的问题
       
  • 指针和指针变量

    • int *pa;
      cha *pc;
      float *pf;
      ​看看指针变量所占空间大小,发现大小都一样
      指针变量不论什么类型都是大小4
      但指针类型是有意义的
      我们创造一种通用类型指针?no

      int a = 0x11223344;
      十六进制的数字组成都是0123456789abcdf这些选项
      最高位f需要几个二级制数表示呢
      f是15,要表示成二进制,四个二级制位
      所以我们说四个二进制位最多可以表示一个十六进制的数字
      ​所以我们在这说:
      int a = 0x11223344
      就是0x11111111111111111111111111111111
      11占一个字节
      两个四二进制位,就是八个二进制位,就是一个字节
      这四个字节把a填充满,是个整形

      取地址a&

      int *pa =&a;
      pa存的是a的地址

      ​*pa=0;
      通过pa找到a


      我们换一种写法:char *pc = &a;
      pc指针也是四个字节
      *pc = 0;
      汇报警告
      地址放得下

      我们发现44变成00了
      只改变了一个字节
      可以下结论了

      int*pa =&a;时
      *pa解引用的时候访问四个字节

      如果我们换成一个char* pc的指针
      我解引用的时候只访问了一个字节
      类型变化,访问权限发生字节
      指针类型有意义

      如果我们是整形指针,解引用的时候,解引用一次可以访问四个字节
      ​字符指针,只能访问一个字节
      说明了指针类型决定了指针解引用的权限有多大
      double可以访问八个字节
      char*指针访问一个字节




      int arr [10] = {0};
      int *p = arr;
      arr是数组首元素的地址,所以放到int * p里去
      放pc也行
      整形的地址 虽然类型不符,但也可以放
      char * pc = arr;
      其实不管怎么的指针,都可以放地址

      当我们打印的时候:
      打印测试
      pc+1
      发现p和pc一样
      但p+1和pc+1不一样
      这个地方现在如果是个整形指针跳过一个整形跳过四加了四
      +1 +4 是因为p和pc的类型不同

      说明了指针类型决定了指针走一步走多远
      double型指针加一 8个字节

      加一可以减一也可以

      指针加减整数有多大距离

      指针类型的意义讲完了

      我们来应用一下

      ​int arr [10] = {0};
      现在我们把arr交给整形指针
      int *p = arr ;

      循环十次

      arr数组交给指针变量p
      p指向这里
      p +1 ;p指向这个位置
      p+i其实就是下标为i的地址
      *(p+i) = 1;
      相对于每个地址都改成1
      走一步跳过一个整形

      整形指针的维护方式
      整形指针加一就是跳过一个整形
      ​解引用就是访问一个整形

      ​加的是一个字节,跳过的是一个字节
      ​告诉我们未来每个指针都有意义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值