C提高(2)/指针

来源:互联网 发布:龙卷风优化软件 编辑:程序博客网 时间:2024/05/18 03:47

指针

我们在之前的blog中曾经提到过一些指针的知识。指针就是地址,地址就是指针。所以指针的概念和内存的概念是紧密联系的。指针的学习贯穿整个C语言的学习。本节就在原来的基础上再讲讲有关指针的一些知识。

  1. 指针也有数据类型
    如何理解这句话?
    我们在上一节知道,数据类型的本质是固定内存块大小的别名,是编译器方便为变量分配内存空间所设置的。指针变量也是一种变量,也占据一定的内存空间。所以说指针也是有数据类型的,这个数据类型,我们把它称为基类型。由指针所指向变量所决定的。
    这个基类型有什么用呢?我们知道,无论指针的基类型是int也好float也好double也好char也好,指针变量所占据的内存空间都是四个字节。尽管基类型对指针变量所占内存块大小没有影响,但是它却影响的指针的步长。当我们执行语句p++时,对基类型为int的指针p来说,移动4个字节;但对基类型为char的指针p来说,指针移动1个字节。基类型的用处就是在移动指针变量时,确定移动内存块的大小。

  2. 指针的操作

    • p变量是指针变量。我们改变p变量的值,实际上是改变指针所指向的内存块,对指针所指向的内存块里的值没有任何影响。
    • *p相当于通过地址(p变量的值)找到一块内存,然后操作内存;*p放在等号的左边赋值(写内存);*p放在等号的右边取值(读内存)
  3. 间接赋值是指针存在的最大意义

    *p间接赋值成立条件:

    • 2个变量(通常一个实参,一个形参)
    • 建立关系,实参取地址赋给形参指针
    • *p形参去间接修改实参的值
      相应代码
      int num=0;int *p=NULL;//条件一:两个变量p=#//条件二:建立关系Num=1;*p=2;//条件三:通过*操作符,间接的给变量内存赋值

    一般,我们用二级指针去跨函数修改一级指针的值;用一级指针跨函数修改普通变量的值

    应用场景:

    • 正常: 条件一,条件二,条件三都写在一个函数里。
    • 间接赋值:条件一,条件二写在一个函数里, 条件三写在另一个函数里
    • C++中,可以将1写在一个函数里,通过传引用的方式,将条件二条件三写在另一个函数里。而C中没有传引用的概念。
  4. 理解指针必须和内存四区结合起来
    这一点我们在开头部分就已经说明了。
    我们这里讲一下主调函数和被调函数的区别

    • 主调函数可把堆区、栈区、全局数据内存地址传给被调用函数
    • 被调用函数只能返回堆区、全局数据

    指针做函数参数,是有输入和输出特性的。通过使用函数我们能够在被调函数中传出所需的内存块。(所谓输入输出,指的是如果在主调函数中分配内存,则是输入;如果在被调函数中分配内存,则为输出)

  5. 应用指针必须和函数调用相结合
    指针是子弹,函数是枪管。
    接口的封装和设计、模块的划分都离不开指针。

0 0
原创粉丝点击