动态内存分配
输入数据
如果输入数据时,先告诉你个数,然后再输入,要记录每个数据
C99可以用变量做数组定义的大小,C99之前呢?
int *a=(int*)malloc(n*sizeof(int));
例:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int number;
int *a;
int i;
printf("输入数量:");
scanf("%d",&number);
a=(int*)malloc(number*sizeof(int));
//因为malloc是指向void的指针所以要把指针转换为int类型
for(i=0;i<number;i++){
scanf("%d",&a[i]);
}
for(i=number-1;i>=0;i--){
printf("%d ",a[i]);
}
free(a);
//将内存还给系统
}
malloc
#include<stdlib.h>//引入头文件
void *malloc(size_t size);//申请空间
向malloc申请的空间大小是以字节为单位的
返回的结果是void*,需要类型转换为自己需要的类型
(int*)malloc(n*sizeof(int));
如果没空间了呢?
如果申请失败则返回0,或者叫做NULL
free()
把申请来的空间还给”系统“
申请过的空间都应该还回去
只能还申请来的空间的首地址
常见问题
申请了没free—>长时间运行内存逐渐下降
free过了再free
地址变过了,直接去free