C语言函数之malloc

C语言函数之malloc

  • 无聊的碎碎记:
  • 前置内容:
  • 函数模板:
  • 作用:
  • 应用实例:

无聊的碎碎记:

malloc的英文全称是memory allocation,所以我觉得把它念成麦老克(不会打音标)应该没啥问题。顺带一提allocation的动词是allocate,也确实就是分配的意思。memory很好说,就是记忆嘛,内存嘛。但是百度百科其实对一整个malloc的翻译是动态内存分配。那么这里面为什么又加入了一个“动态”的修饰词呢?大概是因为它确实就是动态的在分配(?你要不要听听你在说什么
其实就是内存分配存在不同方式啦,之后会跟进这个相关的博客

前置内容:

malloc函数是C语言中一个重要的函数。其包含于头文件malloc.h/stdlib.h中,故使用前要先include一下。

此函数为一个指针型函数,返回值为指向被分配的内存的指针

上面这句话可能有点拗口,拆开来说就是,返回值是一个指针,这个指针指向的是一块内存,一块被分配出来的内存。

头文件中定义malloc函数的原型为:

 void *malloc(unsigned int size)

补充一下

void是一个比较特殊的数据类型,使用void定义的指针,其实可以指向任何类型的数据(这里作为指向一块内存的指针便是只有void才能做到的)

函数模板:

int *p;
p = (int *)malloc(sizeof(int));

使用完了要记得使用free()函数进行内存的释放。

free(p);

作用:

malloc函数可以在内存的动态存储区中分配一个长度为x(x常常用sizeof(datatype)来获取)的连续空间。

应用实例:

小郭正在完成一道coding题,他需要一个能够做到自适应数据个数的数组,但是在设法解决它的时候小郭碰到了不少的难题:

方法1.在定义数组时使用一个变量来表示数组大小。

int arr[N] ={0};

这种方法无法通过编译(“C99里面才可以用变量做数组定义的大小。”来自知乎@hairrrrr

方法2.在定义数组的时候直接使用超大的数字。

int arr[100000] ={0};

这样会浪费太多内存。

方法3.使用malloc函数对数组大小进行动态拓展。

int* arr = (int*)malloc(sizeof(int) * N)

以这个应用实例以及代码为例,我们结合一下实际再对这个代码的各个部分进行解释。

int*//定义一个整数指针
arr//同时完成对arr的定义,arr是被*arr指向的整数数组
=//赋值号
(int*)//强转函数,将从malloc函数中返回的void类型指针强转为int类型指针
malloc(sizeof(int)//单次分配int类型所需的内存(4个字节)
* N)//乘以一个可供赋值的N,以完成数组大小自定义的操作)

小郭学到了新的知识!

如有谬误,敬请指正

你可能感兴趣的:(C语言函数,c语言,数据结构,算法)