准备工作之动态内存分配[基于郝斌课程]
定义一块内存可以用数组定义也可以动态分配使用数组定义一块内存则该块内存是静态的也就是一旦定义之后这块内存的大小就固定了例如数组元素个数是5则定义后这这块内存大小就是5不能再改变但是用malloc动态分配的话这块内存的大小就由我们自己来定义了例如定义大小为5的内存块使用完毕后需要一个大小为3的内存块就可以先使用malloc来定义一个大小为3的内存块如何使用free来释放此块内存之后再次使用malloc来定义大小为3的内存块最后需要用free来释放该块内存/* file main.c brief 数据结构预备知识之动态内存分配 author EricsT (EricsT163.com) version v1.0.0 date 2025-09-20 history 2025-09-20 EricsT - 新建文件 */ #include stdio.h #include malloc.h int main(void) { int a[5] { 4, 10, 2, 8, 6 }; int len; printf(请输入您需要分配的数组长度len ); scanf(%d, len); //malloc函数只返回首字节地址 int* ptr (int*)malloc(sizeof(int) * len);//分配内存 *ptr 4;//类似于a[0] 4 *(ptr 1) 10;//类似于a[1] 10; ptr[2] 2;//类似于a[2] 2 printf(%d %d %d\n\n\n, ptr[0], ptr[1], ptr[2]); for (int i 0; i len; i) scanf(%d, ptr i); for (int i 0; i len; i) printf(%d\n, ptr[i]); free(ptr);//释放内存 return 0; }在以下程序中调用了 f() 函数时 j 所占内存是存在的当 f() 函数调用结束后 j 所占的内存就不合法了因为 j 是一个局部变量/* file main.c brief 数据结构预备知识之动态内存分配 author EricsT (EricsT163.com) version v1.0.0 date 2025-09-20 history 2025-09-20 EricsT - 新建文件 */ #include stdio.h int f(); int main(void) { int i 10; i f(); printf(i %d\n, i); return 0; } int f() { int j 20; return j; }在以下程序中掉用函数结束后ptr都可以指向合法的内存块/* file main.c brief 数据结构预备知识之跨函数使用内存 author EricsT (EricsT163.com) version v1.0.0 date 2025-09-20 history 2025-09-20 EricsT - 新建文件 */ #includestdio.h #include malloc.h void fun(int** p); int main(void) { int* p; fun(p); //调用完之后p就指向合法的内存块 return 0; } void fun(int** p) { *p (int*)malloc(4);//手动分配不释放就会一直被占用 }/* file main.c brief 数据结构预备知识之跨函数使用内存 author EricsT (EricsT163.com) version v1.0.0 date 2025-09-20 history 2025-09-20 EricsT - 新建文件 */ #include stdio.h #include malloc.h struct Student { int sid; int age; }; Student* CreatStudent(void); void ShowStudent(Student* ptrStu); int main(void) { Student* ptrStu;//占4个字节 //Student std;//占8个字节所以采用指针操作 ptrStu CreatStudent(); ptrStu-age 10; ptrStu-sid 99; ShowStudent(ptrStu); return 0; } Student* CreatStudent(void) { return (Student*)malloc(sizeof(Student)); } void ShowStudent(Student* ptrStu) { printf(%d %d\n, ptrStu-age, ptrStu-sid);
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2473880.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!