zoukankan      html  css  js  c++  java
  • C语言 函数

    内存属性:

    1.大小

    2.位置

    int a;  默认方式  (段)

    ———————————————————————————————————————————————————————————————————————————————————————— 

    内核空间        应用程序不许访问

     ------------------------------------------3g

    栈空间                     局部变量                                           读写             (运行时,函数内部使用的变量,函数一但返回,就释放,生存周期时函数内)

    -----------------------

    运行时的堆空间      malloc                 (运行时,可以自我管理的分配和释放的空间,生存周期由程序员觉得)  分配:  malloc() ,一旦成功,返回分配好的地址给我们,只需要接受,对这个 地址的读法,由程序员把握,输入参数指定分配的大小,单位是B。        

                                                                             释放:free(p);

    ------------------------

    全局的数据空间     (初始化的,未初始化的)   (static为局部的全局数据段)                读写           data(全局初始化)   bss(全局未初始化)

    只读数据段            “ ”      字符串常量             只读                  text           (静态空间,整个程序结束时释放内存,生存周期最长)

    代码段               code          只读                                 text

    -------------------------

    0x0 ;

    ————————————————————————————————————————————————————————————————————————————————————

     

    分配:   

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    输入参数

                调用者 :   函数名 (数据)           //实参

                被调者:    函数的具体实现

                                   函数的返回值 函数名(接受的数据)          //  形参

                实参以拷贝的的形式传递给形参:

    --------------------------------------------------------------------------------------------------------------------------------------------------

    地址传递:(用处:1,上层允许下层子程序修改其空间值;;2. 连续空间的传递)

    swpa()将main中的AB值拷入自己的AB值中交换数值,其swpa()中AB值被交换,但不会影响到main() 中的AB值

    swap()将ab的地址拷入,直接操作其地址的值,致使main()中ab的值也发生变化。

    空间的读写 (节约内存,只需要知道首地址)

    void fun (char *p);        该空间可能修改             

    void fun (const char *p)      只读空间

    空间:首地址,结束地址(必须知道)

    结束标志:字符空间:内存里面存放了0x00 (1B)                      while(p[i]==0)  { };

                    非字符空间:0x00不能当成结束标志,必须有数量。   for (i = 0 ; i < len ; i++)  { };   

                     一般定义数组定义为unsigned char buf [];

                       void * :  非字符空间的标识符; 形参可以代表任何形式 (char ,int,struct 等)。

                                

        void *  在具体使用中一定要转化成具体的类型

    实际中:如果操作整个空间,定义为void *  ;  如果是值的修改,定义为具体。

              

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------

    连续空间的传递:

       1,数组

        数组名 -- 标签

            实参:

              int abc[10];

             fun (abc)

          形参:

         void fun(int *p)  ==    void fun (int p[10])

      2.结构体

        结构体变量

      struct abc{int a;int b; int c;};

      用: struct abc buf;

      实参:

         fun(buf);                                           fun(&buf)

       形参:

          void fun (struct abc ai)                void fun (struct abc *a2)  优

    *********************************************************************************************************************************************************************

     返回值

    基本语法:返回类型 函数名称 (输入列表)     return 

    指针式空间返回的唯一数据类型

    int *fun();

    地址 :指向的合法性。【不是局部变量】

      局部变量buf定义在fun()中,作为返回值在main()中P指向时,已经消失;而“ ” 在常量区,不会消失,所以P指向

    方式:1,static 静态区

               2,只读区 (基本用不到)

              3,堆区     (malloc申请空间,使用strcyp()将其初始化,返回;在主函数调用完成后必须使用free()释放空间)

                                      

  • 相关阅读:
    如何修补软件、系统漏洞?
    轻松学习Linux之本地安装系统
    看程序体验缓冲区溢出漏洞
    企业网管软件实战之SolarWinds LANsurveyor
    Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑
    史上最佳 Mac+PhpStorm+XAMPP+Xdebug 集成开发和断点调试环境的配置
    [noip2011]计算系数+二项式定理证明
    [nowcoder5668H]Sort the Strings Revision
    (动态规划)导弹防御
    nyoj 79 拦截导弹
  • 原文地址:https://www.cnblogs.com/chu-yi/p/9775053.html
Copyright © 2011-2022 走看看