11.22

malloc一维数组

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. int main(){
  5. int*p=(int*)malloc(sizeof(int)*5); //malloc一个五个整形长度的空间
  6. }

用法基本和指针一致

malloc数组与int a[3]这种栈区数组的区别:

  • 定义不一样,使用大致一样,malloc需要free
  • malloc的数组可在运行过程中指定,而后者确定后不能再修改
  1. unsigned int a;
  2. scanf("%d",&a)
  3. int* p=(int*)malloc(a);
  1. int (*p)[5]=(int(*)[5])malloc(sizeof(int)*5);
  2. int a[5];
  3. int (*p1)[5]=&a; //&a==...malloc...
  4. *(*p+0)=1; //相当于*(a+0)=1 赋值
  5. *(*p+1)=2; //==(*p)[1]
  6. *(*p+2)=3;
  7. *(*p+3)=4;
  8. *(*p+4)=5;
  9. printf("%d ",(*p)[n]); //是(*p)[n]
  10. free(p);
  1. int (*p)[2][3]=(int(*)[2][3])malloc(sizeof(int)*2*3);
  2. (*p)[0][0]=1;
  3. (*p)[0][1]=1;
  4. (*p)[0][2]=1;
  5. (*p)[1][0]=1;
  6. (*p)[1][1]=1;
  7. (*p)[1][2]=1;

==*(p+n)====p[n]

calloc

申请数组空间 初始化为0

  1. int*p=(int*)calloc(5,4); //申请一个五个元素的四字节数组
  2. free(p)

realloc

重新分配内存的大小

  1. int*p=(int*)malloc(sizeof(12));
  2. int *p1=(int*)realloc(p,20); //原来p的内存大小变了

如果更改后的内存在原位放不下,会另找一块地方放,地址就变了