内存属性:
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()释放空间)