指针和动态内存

53 阅读1分钟

指针和动态内存

一.区别 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