动态内存分配
来源:互联网 发布:face nginx 编辑:程序博客网 时间:2024/06/13 23:43
``` //void test(){// int b = 7;// static int a = 3;// a++;// b++;// printf("a = %d , b = %d\n", a, b);//}typedef struct student { int num; char name[20];}Student;void *fun(){ char string[] = "adjid"; return string; //string 是局部变量 返回就错了 所以禁止这么返回}char fun1(){ return 'c';}int main(int argc, const char * argv[]) { char *ret = fun(); char ret1 = fun1(); printf(" %c",ret1); 只读 coust const int a = 0; a = 3; //这时就错了 static 静态 将局部变量 不被释放 test(); test(); malloc() 作用 : 在内存中开辟一块空间 参数 : 开辟空间的大小(单位 :字节) 返回值: 开辟空间的首地址 int *p = malloc(4); int *p = malloc(sizeof(int)); *p = 3; printf("%d \n", *p); int *p = malloc(sizeof(int) * 3); *p = 10; *(p + 1) = 11; *(p + 2) = 12; for (int i = 0; i < 3; i++) { printf("%d ", *(p + i)); printf("%d ", p[i]); } 从键盘输入字符串,将字符串中的数字挑出来存到另一个数组 char src[20] = {0}; char des[20] = {0}; int j = 0; printf("输入:"); scanf("%s", src); for (int i = 0; i < strlen(src); i++) { if ( src[i] >= '0' && src[i] <= '9') { des[j] = src[i]; j++; } } printf("%s", des); 1.开辟一个空间,存一个double类型的值,并打印 double a = 2.432; printf("%f \n", a); 2.开辟一个空间,存 8 个double类型的值,并打印每个元素 double *p = malloc(sizeof(double) * 8); double val[8] = {12.12, 23.44, 43.6, 431.3, 674.34, 5.2, 34.34, 34.645}; p = val; for (int i = 0; i < 8; i++) { printf(" %f ",*p++); } 3.开辟一个空间,存一个结构体(student)类型的值(为每个成员赋值),并打印 Student stu = {111,"aaa"}; printf(" %d %s", stu.num, stu.name); 4.开辟一个空间,存 3 个结构体(student)类型的值(为每个成员赋值),并打印 Student stu[3] = {{111,"aaa"}, {222,"bbb"}, {333,"ccc"}}; for (int i = 0; i < 3; i++) { printf(" %d %s\n", stu[i].num, stu[i].name); } 输入3个单词,动态分配内存保存单词,并在最后输出 char temp[20] = {0}; char *words[3] = {NULL}; for (int i = 0; i < 3; i++) { scanf("%s", temp); //计算输入的单词长度 long len = strlen(temp); //开辟空间 words[i] = malloc(sizeof(char) * (len + 1)); //存储到开辟的空间中 strcpy(words[i], temp); } for (int i = 0; i < 3; i++) { printf("%s\n", words[i]); } //释放空间 for (int i = 0;i < 3 ; i++) { free(words[i]); } int a = 0; int *p = malloc(sizeof(int )); 1.可以通过名字和地址访问 只能通过地址访问 2.在编写代码是限定好大小 可以在执行时动态分配大小 3.生存周期结束后系统自动释放 只能手动释放 4.两次连续定义,地址连续 不一定连续 5.栈区 -开辟小空间 堆区- 大空间 int a = 0 ; printf("栈 区:%p\n",&a); int *p = malloc(sizeof(int)); printf("堆 区:%p\n",p); static int b = 0; printf("静态区:%p\n",&b); char *s = "adads"; printf("常量区:%p\n", s); printf("代码区:%p", fun); / 动态内存分配方式 // 目的:用一个正好的数组去存挑出的数字 char src[100] = {0}; int num = 0; scanf("%s", src); // 1, 先查出数字个数 for (int i = 0; i < strlen(src); i++) { if (src[i] >= '0' && src[i] <= '9') { num++; } } // 2, 动态开辟一段空间, 并为\0多预留一个空间 char *p = malloc(sizeof(char) * (num + 1)); // 保存空间的首地址 char *head = p; // 3, 存数字 for (int i = 0; i < strlen(src); i++) { // 判断, 若为数字 if (src[i] >= '0' && src[i] <= '9') { *p = src[i]; p++; } } *p = '\0'; printf("%s\n", head); 周游老师 16:05:10 1, 开辟一个空间, 存一个double类型的值, 并打印 double *p = malloc(sizeof(double)); *p = 5.5; printf("%.1f\n", *p); 2, 开辟一个空间, 存8个double类型的值, 并打印每一个元素 double *p = malloc(sizeof(double) * 8); for (int i = 0; i < 8; i++) { *(p + i) = 100.0 / (i + 1); printf("%.1f ", p[i]); } 3, 开辟一个空间, 存1个结构体(student)类型的值(为每一个成员赋值), 并打印 Student *p = malloc(sizeof(Student)); p->num = 1; p->sex = 'm'; p->score = 99.9; strcpy(p->name, "superMan"); printf("%d %s %c %.1f\n", p->num, p->name, p->sex, p->score); 4, 开辟一个空间, 存3个结构体(student)类型的值(为每一个成员赋值), 并打印 Student *p = malloc(sizeof(Student) * 3); for (int i = 0; i < 3; i++) { (p + i)->num = i; (p + i)->sex = 'm'; (p + i)->score = 99.9 - i; strcpy((p + i)->name, "superMan"); printf("%d %s %c %.1f\n", (p + i)->num, (p + i)->name, (p + i)->sex, (p + i)->score); }
“`
0 0
- 动态内存分配
- 关于动态内存分配
- 关于动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- C++ 动态内存分配
- VC动态内存分配
- 动态数组分配内存
- C++动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配
- 动态内存分配+链表
- 动态内存分配函数
- boost中unordered_map的用法
- 第十三周项目四:Floyd算法的验证
- 第十三周--数据结构-Kruskal算法的验证
- LeetCode 224 Basic Calculator
- 打开蓝牙设备
- 动态内存分配
- ORACLE 事务属性详解
- JarURLConnection用途
- 安装linux学习三(2):CentOS 5.5下安装MySQL 5.5全过程分享
- Xcode升级后插件失效的原理与修复办法
- property Animaton属性动画
- 192.168.0.1/24子网的概念
- FragmentTransaction与Fragment生命周期的关系
- 常用linux指令(centos版)