内存属性:

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

 

 

                                  

posted on 2018-10-13 18:52  ._初一  阅读(247)  评论(0编辑  收藏  举报