栈区(stack area):内存由系统申请,在变量生命周期结束时由系统释放
堆区(heap area):由我们申请,自己释放,(malloc,realloc,calloc)
malloc
int* p = (int*)malloc(sizeof(int)* 10);//int*是强制转换的类型,参数是申请空间的字节大小
free(p);//释放
p = NULL;//赋值空
//malloc和一维数组指针
//malloc和一维数组指针
int(*p)[5] = (int(*)[5])malloc(sizeof(int)* 5);
int n[5];
p = &n;
*(*p + 0) = 1;
*(*p + 1) = 2;
*(*p + 2) = 3;
*(*p + 3) = 4;
*(*p + 4) = 5;
for (int i = 0; i < 5; i++)
{
printf("%d\t", (*p)[i]);
}
//malloc和二维数组指针
//malloc和二维数组指针
int(*p1)[2][3] = (int(*)[2][3])malloc(sizeof(int)* 6);
int n1[2][3];
p1 = &n1;
(*p1)[0][0] = 1;
(*p1)[0][1] = 2;
(*p1)[0][2] = 3;
(*p1)[1][0] = 4;
(*p1)[1][1] = 5;
(*p1)[1][2] = 6;
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%d\t", (*p1)[i][j]);
}
printf("\n");
}
calloc
//calloc
int* p = (int*)calloc(5, 4);//5个元素 每个元素4字节 初始化为0
for (int i = 0; i < 5; i++)
{
printf("%d\t", p[i]);
}
//realloc
//realloc 改变动态指针的大小(字节数)
int *p = (int*)malloc(12);
printf("%d\n", _msize(p));//_msize(p) 查看指针p的字节大小
int *p1 = (int*)realloc(p, 10);//动态指针,修改后的字节数
printf("%d\n", _msize(p));
扫描二维码关注公众号,回复:
4986889 查看本文章
![](/qrcode.jpg)