1.动态内存的相关函数
开辟内存:malloc,calloc,realloc
释放内存:free
动态内存开辟的空间是在堆区(heap),注意开辟的内存空间必须是连续的
定义普通局部变量是在栈区(stack),栈约为1M(不到1M),而且在不同的操作系统,栈的大小是不固定的,但是都是栈小,堆大,在Windows中,栈的大小是可以调整的(在VS编译器中,工具-属性中是可以调整的)
需要使用动态内存的原因:
①需要较大的内存
②需要根据变量动态开辟内存
注意:开辟内存用完后,一定要释放,否则会引起内存泄露
内存泄露的问题:
①很难发现,很难找
②浪费资源
内存泄露一定会回收的情况:
①程序(程序运行就叫进程)退出了,一般说进程退出了,只要出现“请按任意键退出”这句话就是进程结束了
②重启,会把所有的内存泄露都回收回来,但是在公司中,一般服务器是不能轻易重启的,所以养成释放动态内存这个习惯是很好的
*2.void 的相关问题
void *:通用地址,仅仅只是记录地址,其中的数据类型并不知道
void *可以转成任一类型的指针
注意:void *不可以解引用,因为它可以是任一类型的指针
3.筛选法求素数
//筛选法求素数
#include <stdlib.h>
#include <stdio.h>
void Fun(int n)
{
//申请动态内存(返回的是这块内存的首地址)
//括号里的是需要申请的字节数
int* arr = (int *)malloc(sizeof(int) * n);
int i;
for(i = 0;i<n;i++)
{
arr[i] = 1;//标记
}
arr[0] = arr[1] = 0;\
for(i = 2;i<n;i++)
{
for(int j = i+1;j<n;j++)
{
if(j%i == 0)//j是i的倍数
{
arr