zoukankan      html  css  js  c++  java
  • 指针入门(四)

    指针与函数:函数用来操作数据,改变程序的运行状态。指针用来根据地址访问变量,函数名称本身也是地址,因此你将函数和指针的结合,就能够实现将复杂数据用指针传递和用指针返回,达到动态控制函数执行流的目标。

    函数和指针的结构,需要通过程序栈的作用。函数和指针的结构主要有两种方式:(1)将指针作为参数,传递给函数,通过函数实现数据的修改,避免复制大量的数据,提高效率。(2)使用函数指针,函数名表示本身就是函数的地址,不过函数指针还是为程序执行流提供了新的可能。

    一、基本概念:

    1、程序的堆栈:堆和栈不是同一个概念,堆是heap,栈是stack,学过数据结构的同学对栈很熟悉。

    两者的共同点:都是函数的执行区域,二者共享一块内存区域

    两者的不同点:(11)栈通常占用共享区域的下部,因此FILO是其基本访问特征,栈是往上生长的;

    (12)栈内容一般不会清除,但可能会被另外的栈的内容覆盖;

    (13)栈空间往往是系统管理的,无需用户自己关心;

    (21)堆通常占用共享区域的上部,因此堆上往下生长的;

    (22)堆内容一般需要用户自行清楚,否则就会成为内存泄漏的元凶;

    (23)堆空间往往是用户自己申请的,使用结束后需要自行进行释放;

    2栈帧的组织:函数调用过程中,往往借助与栈存储调用函数的临时现场,每个函数都会有一个单元,这个单元通常被称为栈帧。栈帧中往往存放着函数参数和局部变量,与具体的函数是一一对应的。这也是为什么局部变量可以重名,名称虽然一样,但是不是在一块区域,依然可以保证地址不同。

    栈帧的内容组织:(1)调用函数的返回地址,这是程序能够调用函数后正确返回的关键

    (2)函数的返回值:被调用函数如果有返回值,也需要预留返回值的存储空间

    (3)局部数据存储:局部变量的内存空间

    (4)参数存储:为函数参数预留的空间

    (5)栈指针和基指针:运行系统用来管理栈的指针

  • 相关阅读:
    套接字socket
    Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
    How to start/stop DB instance of Oracle under Linux
    Oracle SGA具体解释
    Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0
    MapReduce(十六): 写数据到HDFS的源代码分析
    Spring表达式语言SpEL简单介绍
    LinkCutTree详解
    洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
    树链剖分详解
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6823174.html
Copyright © 2011-2022 走看看