zoukankan      html  css  js  c++  java
  • <十> 指针

    终于写到指针了,真是太不容易了,我觉得,指针对于C来说太重要了!真的非常非常重要!

    为什么需要指针

    指针解决了一些编程中基本的问题。

    1. 指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。
    2. 指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。
    3. 有些操作必须使用指针。如操作申请的堆内存。还有:C语言中的一切函数调用中,值传递都是“按值传递”的,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。

    指针是什么

    我们指知道:
    • C语言中的数组是指 一类 类型,数组具体区分为  int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。
    • 通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。
    • 我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址我们就需要指针变量
    • 因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量

    定义指针

    • int a = 10;
    • int *p = &a;
    • char b = ‘K’;
    • char *w = &b;

    运算符

    • 1----  &
      • 取地址符:获取数据的内存地址
    • 2----  *
      • 1、定义指针变量时代表类型的一部分
      • 2、指针解引用:通过地址获取地址里的内容(钥匙)
      • 3、指针的降级(行指针-->列指针)
    • 3----  +-
      • 指针加减:加减的是单位长度。
      • 单位长度:由指向数据类型所占的字节数决定。
    • 4----  []
      • 指针加单位长度后,取内容运算
      • a[i] 《==》 *(a+i)

    指针与数组

    • int a[5] = {0,1,2,3,4};   //a:20字节
    • int *p = a;             //p:4字节

    p[3] <==> *(p+3)          //p是变量

    a[3] <==> *(a+3)        //a是常量

    数组指针

    数组指针:本质是指针,专用于存储数组的地址多数用于指向二维数组
    char a[3][4] = {0};
    char (*p)[4] = a; //size == 4;

    a[i][j]; <==> *(a[i]+j); <==> *(*(a+i)+j);
    p[i][j]; <==> *(p[i]+j); <==> *(*(p+i)+j);

    a:地址常量(不可写的内存地址值)
    p:指针变量(专用于存储地址的变量)

    数组指针

    指针数组:本质是数组,元素是指针

    int *p[3];

    元素类型:int *
    数组名字:p
    元素个数:3

    二级指针

    short a = 10; //size == 2

    short *p = &a; //size == 4

    short **w = &p; //size == 4

      w <==> &p
     *w <==>   p   <==> &a;
    **w <==> *p   <==>   a;

    void

    void *p;      //泛型指针,使用时需要强制类型转换

    const

    const int * p;    //常量化*p
    int * const w;    //长量化w

    NULL

    NULL 《==》 0    //防止野指针的形成

    青春看起来如此完美, 没空闲去浪费时间。 <我们最后的话——刺猬>
  • 相关阅读:
    超链接解决头部fixed问题
    cookie操作
    JS 阻止整个网页的内容被选中
    stopPropagation(), preventDefault() 和 return false
    获得元素的位置。宽、高
    css 清除浮动
    pytest官网文档の第一章:安装和快速开始
    采用Anaconda安装python
    jmeter利用BeanShell PreProcessor编写脚本实现参数化
    java长连接和短连接
  • 原文地址:https://www.cnblogs.com/WangJing0506/p/8542298.html
Copyright © 2011-2022 走看看