动态内存分配
系统为了有效地管理内存, 把内存划分为:
1.栈区
2.堆区
3.静态区(全局区)
4.常量区
5.代码区
注: 内存地址编号由高到低(栈区->代码区)
1.栈区
栈区的数据以栈的形势存储
栈, 先进后出
栈区存放的数据: 局部变量(定义在函数内部的变量)
栈区的内存油系统自动管理的(分配内存, 回收内存), 不需要开发人员管理
栈区只有8MB, 容易出现栈溢出
stackoverflow网站
栈区的内存, 函数结束时, 被收回
int a = 10;//栈区分配4个字节 printf("栈区地址: %p ", &a);
2. 堆区
由开发人员手动管理(申请内存, 释放内存)
堆区空间比较大
申请内存函数
void *malloc(<#size_t#>)
返回值类型: void *, 空指针类型(泛指针类型), 可以转化成任意的指针类型
函数名: malloc
参数: size_t, unsignedlong, 申请的字节数
//从堆区申请4个字节的内存, 并返回首地址 int *p1 = malloc(4); //向堆区存入数据1024 *p1 = 1024; printf("%d ", *p1); printf("堆区地址: %p ", p1); //在堆区存入"iPhone 6s" char *p2 = malloc(10); strcpy(p2, "iPhone 6s"); printf("%s ", p2); printf("堆区地址: %p ", p2); *p2 = 68; printf("%s ", p2); p2[3] = '