最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
ptr = (int*)malloc(num*sizeof(int));
if(NULL != ptr)//判断ptr指针是否为空
{
int i = 0;
for(i=0; i<num; i++)
{
*(ptr+i) = 0;
}
}
free(ptr);//释放ptr所指向的动态内存
return 0; }
calloc
该函数的功能是开辟num大小为size的空间空间,并且把空间的每个字节初始化为0。
int main()
{
int *p = calloc(num, sizeof(int));
if(NULL != p)
{
//使用空间
realloc
realloc函数是让动态内存的管理更加灵活。
就是为了在我们申请空间的时候,会发现我们申请的太大了或者太小了,为了更加合理大小对其作出调整。realloc函数就可以做到。
返回的为调整之后的内存起始位置。
在调整大小的基础上,会将原来数据移动到新的空间。
**realloc会存在俩种情况。
1.原有空间之后有足够大的空间。
2.原有空间之后没有足够大的空间。**
情况1: 当是情况1 的时候,要扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化。
情况2: 当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址。 由于上述的两种情况,realloc函数的使用就要注意一些。 举个例子:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *ptr = malloc(100);
if (NULL != ptr)
{
//业务处理
}
else
{
exit(EXIT_FAILURE);
}
//realloc函数运用
//代码一
ptr = realloc(ptr, 1000);
//代码二
int *p = NULL;
p = realloc(ptr, 1000);
if (p != NULL)
{
ptr = p;
}
//业务处理
free(ptr);
return 0;
}
**PS:
一定不要忘记释放空间,不然会造成严重的内存泄漏。**
柔性数组
结构中的最后一个元素允许是未知大小的数组。
如:
typedef struct st_type
{
int i;
int a[0];//柔性数组成员
}type_a;
//或者
typedef struct st_type
{
int i;
int a[];//柔性数组成员
}type_a;
特点:
- 结构中的柔性数组成员前面必须至少一个其他成员。
sizeof 返回的这种结构大小不包括柔性数组的内存。
包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应
柔性数组的预期大小。
柔性数组的使用及其优势;
最后
2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。
更多JVM面试整理:
fKF-1715429876581)]