周需要备考期末所以推迟了每周总结
第一周
关于课堂上我们学习
一,C语言内存的分类
内存分为堆区,栈区,常量区、静态区
1,栈区(Stack)
- 主要用于存储函数的参数值、局部变量等。其操作方式类似数据结构中的栈,先进后出。例如,在一个函数调用过程中,函数内定义的局部变量就存放在栈区。当函数执行完毕,这些局部变量所占用的空间会自动释放。
2,堆区(Heap)
- 用于动态分配内存。程序员可以通过特定的函数(如C语言中的malloc和free)来申请和释放内存。如果申请了内存但忘记释放,就会导致内存泄漏。比如在创建链表节点时,节点的内存空间通常是在堆区分配的。
3,全局区(静态区)
- 包括全局变量和静态变量。全局变量可以在整个程序的多个函数中访问。静态变量又分为静态局部变量和静态全局变量。静态局部变量在函数第一次调用时初始化,并且在函数调用结束后依然存在,下次调用函数时还可以继续使用;静态全局变量则限制了变量的作用域在定义它的文件内。
4,常量区
- 用于存放常量字符串和常量数据。这些数据在程序运行期间不能被修改。例如,程序中定义的字符串常量就存放在常量区。
而我们在现在刚刚接触的C语言所编写的代码都是简单代码一般没有使用堆区,而是使用的栈区,内存在函数运行完后会自动释放而且栈区的内存的位置比较小,而堆区才是我们更方便和常规的使用的内存
所以我们学习了动态内存的申请和使用(也就是堆区)
malloc申请空间(连续)
calloc申请空间+数据初始化
realloc修改空间大小
free 释放空间
都在#include<stdlib.h>的头文件里
malloc函数
我们需要注意调用该函数的条件
1,是需要#include<stdlib.h>的头文件
2,需要明白调用该函数的格式是原本malloc的返回值是空类型malloc(是申请的字节数)下面是运用强制转化为int类型方便用指针使用
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p;
p = (int *)malloc(sizeof(int));
if (p == NULL) {
printf("内存分配失败");
return 1;
}
*p = 10;
printf("%d", *p);
free(p);
return 0;
}
这样就申请了一个堆区的地址
calloc函数
int *arr;
// 分配可以存储10个整数的空间
arr = (int *)calloc(10, sizeof(int)


166

被折叠的 条评论
为什么被折叠?



