11.22
malloc一维数组
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
int main(){
int*p=(int*)malloc(sizeof(int)*5); //malloc一个五个整形长度的空间
}
用法基本和指针一致
malloc数组与int a[3]这种栈区数组的区别:
- 定义不一样,使用大致一样,malloc需要free
- malloc的数组可在运行过程中指定,而后者确定后不能再修改
unsigned int a;
scanf("%d",&a)
int* p=(int*)malloc(a);
int (*p)[5]=(int(*)[5])malloc(sizeof(int)*5);
int a[5];
int (*p1)[5]=&a; //&a==...malloc...
*(*p+0)=1; //相当于*(a+0)=1 赋值
*(*p+1)=2; //==(*p)[1]
*(*p+2)=3;
*(*p+3)=4;
*(*p+4)=5;
printf("%d ",(*p)[n]); //是(*p)[n]
free(p);
int (*p)[2][3]=(int(*)[2][3])malloc(sizeof(int)*2*3);
(*p)[0][0]=1;
(*p)[0][1]=1;
(*p)[0][2]=1;
(*p)[1][0]=1;
(*p)[1][1]=1;
(*p)[1][2]=1;
==*(p+n)====p[n]
calloc
int*p=(int*)calloc(5,4); //申请一个五个元素的四字节数组
free(p)
realloc
int*p=(int*)malloc(sizeof(12));
int *p1=(int*)realloc(p,20); //原来p的内存大小变了
如果更改后的内存在原位放不下,会另找一块地方放,地址就变了