指针的运算:动态内存分配
- 如果输入数据时,先告诉你个数,然后再输入,要记录每个数据
- 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));
for (i=0; i<number;i++){
scanf("%d", &a[i]);
}
for (i=number-1; i>=0; i++){
printf("%d", a[i]);
}
free(a);
return 0;
}
malloc
#include<stdlib.h>
*void malloc(size_t size);
- 向malloc申请的空间的大小是以字节为单位的
- 返回的结果是void*,需要类型转换为自己需要的类型
- (int *) malloc(n *sizeof(int))
没空间了?
- 如果申请失败则返回0,或者叫做NULL
- 你的系统能给你多大的空间?
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
void *p;
int cnt = 0;
while ( (p=malloc(100*1024*10024)) ){
cnt++;
}
printf("分配了%d00MB的空间\n", cnt);
return 0;
}
free()
-
把申请得来的空间还给“系统”
-
申请过的空间,最终都应该要还
- 混出来的,迟早都要还的
-
只能还申请来的空间的首地址
常见问题
-
申请了没free->长时间运行内存逐渐下降
-
free过了在free
-
地址变过了,直接去free
网友评论