指针和动态内存
一.区别 malloc、calloc、realloc
1.malloca
-
形式上:voidmalloc(numbersize_of(int))
number : 单元的数量
size_of(int) : 每个单元的字节数 number*size_of(int) : 总共需要的字节数 -
同时动态内存可以应用在,我们对所定义的数组内部的元素无法确定的情况,即元素个数通过scanf()输入。
-
代码解释:
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
int*A=(*int)malloc(n*size_of(int));
for(int n = 0;n<i;n++){
A[i]=i+1;
}
for(int n = 0;n<i;n++){
printf("%d",A[i]);
}
return 0;
}
- 使用上:在堆上找寻内存,使用后要使用free()回收以免造成内存泄漏。
2.calloc
- 形式上:void*calloc(number,size_of(int))
- 区别与malloc的是它会将元素进行初始化。
3.realloc
- voidrealloc(voidstar,number*size_of(int))
- 通常用于修改内存大小,当我们所要扩大的内存可以在原本内存空间的基础上进行扩展,那么此次扩展就是连续的扩大内存,否则要重新分配内存(把之前的存储的内容拷贝后,释放之前存储的内存)。
- 使用方法:首先重新定义一个指针变量,在realloc()内存放形式为(原始指针地址,想要增加的内存大小)
- 代码举例:
#include <stdio.h>
int main(){
int i;
scanf("%d",&i);
int*A=(*int)malloc(n*size_of(int));
for(int n = 0;n<i;n++){
A[i]=i+1;
}
int*B=(*int)realloc(A,2*n*size_of(int))
for(int n = 0;n<i;n++){
printf("%d",A[i]);
}
return 0;
}
intB=(int)realoc(A,0) 即表示释放A的内存,相当于free(A) intB=(int)relloc(NULL,n*size_of(int))相当于malloc