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()释放空间)

                                      

  • 相关阅读:
    [JSOI2007][BZOJ1031] 字符加密Cipher|后缀数组
    leetcode Flatten Binary Tree to Linked List
    leetcode Pascal's Triangle
    leetcode Triangle
    leetcode Valid Palindrome
    leetcode Word Ladder
    leetcode Longest Consecutive Sequence
    leetcode Sum Root to Leaf Numbers
    leetcode Clone Graph
    leetcode Evaluate Reverse Polish Notation
  • 原文地址:https://www.cnblogs.com/chu-yi/p/9775053.html
Copyright © 2011-2022 走看看