开始学数据结构引用数据时,想创建一个数据量未知的数组,由于C语言学的欠缺,找了很多文章不得要点,而且dbug多次没有run,最后运行结束后做个总结,有不对的地方请谅解
前言
malloc函数在stdlib.h中,是记录字节的函数。在stdlib.h中是
void* mallco(size_t size),参数类型是size_t,无返回值
————————————————————————————————————
一、mallco是什么意思
引用自翁恺老师的C语言 https://www.bilibili.com/video/BV1dr4y1n7vA/?p=87&vd_source=1cb0531b25720f8b7430744365abec0f
malloc是申请空间大小,会计算给你想要的空间大小
#include <stdio.h>
#include <stdlib.h>
void main()
{
int cnt = 0;
void* p;
while ((p = malloc(100 * 1024 * 1024)))
{
cnt++;
}
printf("分配了%d00MB的空间", cnt);
}`
这里的1024*1024是1MB,所以while中计算了我的电脑可以由malloc申请到多少的空间,当while不能申请时则退出,并且我的cnt记录了循环多少次。
以下是结果
二、如何用malloc做一个未知大小的数组
有了上面的了解,可以用mallco申请数组空间
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i=0;
int* p;
int size=0;
printf("请输入数组数量:");
scanf_s("%d", &size);
p = (int*)malloc(size * (sizeof(int)));
printf("请输入数组:");
for (i = 0; i < size; i++)
{
scanf_s("%d", &p[i]);
}
for (i = 0; i < size; i++)
{
printf("%d ", p[i]);
}
free(p);
}
上述代码展现了数据申请过程,这句中
p = (int*)malloc(size * (sizeof(int)));
(int*)是强行转换malloc类型,因为上面讲过malloc的返回类型时void(不返回)
size时我们想要的大小,而我们定义的数组是int型,所以sizeof计算了一个数组元素的大小
而我们在使用malloc后需要把内存释放,就是free(p)
结果是
要注意这个free(p)很重要,如果你不释放内存的话,这部分会一直被占用直到没有空间再去分配
总结
以上就是解决动态分配数组的方法,欢迎与我交流分享,有问题请指出