//内存:5个区域
//1、栈区 --系统分配以及回收内存。-函数体内-创建的变量分配在栈区。
//int a = 10; //a存在内存的栈区 10存在常量区
//2、堆区(重点 ---动态内存分配)//由用户 (程序员)分配和回收
//如果未回收内存,那么容易内存越来越少,导致内存不够用,程序崩溃,如果没有达到不够用,程序安然无恙。当程序退出时,堆内存由系统回收
//3、常量区 用于存放常量的内存区域
//10,1.5,'1',"hello"
//4、静态区(全局区)函数体外创建的变量 //定义在函数体外面的变量,由系统开辟空间,程序运行过程中一直存在,直到程序退出由系统回收。
//5、代码区 main 函数//存放源代码编译结果的区域。
//void *malloc(unsigned int size);
//malloc函数向系统申请分配size个连续的内存空间,返回值是void*
// void*属于指针类型 程序员需要自己需要转换成自己需要的类型
//void *p = malloc(10); //向系统申请十个大小的分配空间
//malloc 分配指定大小的内存空间,但是不会把分配的空间清零
//free(p);//释放堆空间 标记删除 不清除内容
// char *str = malloc(8);
// strcpy(str, "iphone");
// printf("%s",str);
// free(str);
//
// int *p = malloc(4);
// *p = 30;
// printf("%d\n",*p);
//
// free(p);
// int *arr = malloc(sizeof(int)*5);//20 = 4*5
// arr[0] = 18;
// arr[1] = 12;
// arr[4] = 25;
// arr[3] = 9;
// for (int i = 0; i < 5; i ++)
// {
// printf("%d ",arr[i]);
// } //没有赋值的还是保留原值
// int (*p)[3] = malloc(sizeof(int) * 2 * 3);
// p[0][0] = 1;
// p[0][1] = 24;
// p[0][2] = 8;
// //去*加方括号 p[][3]
//
// typedef struct stu
// {
// char name[20];
// int age;
//
// }Student;
// int main(int argc, const char * argv[])
//{
// Student *p = malloc(sizeof(Student));
// strcpy(p-> name,"zhangsan");
// p->age = 20;
// printf("%s %d",p->name,p->age);
//
// return 0;
//
//}