C语言中malloc函数的理解

在C语言中malloc函数主要是用在堆内存的申请上,使用malloc函数时,函数会返回一个void *类型的值,这个值就是你申请的堆内存的首地址;为什么返回的地址是一个void *类型的地址呢?首先我们要先弄明白,到底void是一个什么类型呢?很多C语言的初学者认为,void类型就是空类型,就是没有类型,但是实际上这种认知是扯淡的。因为空白的意思是可以容纳百物(讲C语言突然讲出了道家的思想,自己这么流弊的吗?哈哈哈哈哈嗝),既然可以容纳百物,也就是void型其实就是万能型,它可以指代任意类型。其次,还有一个疑问就是malloc函数作为一个申请堆内存的函数,为什么需要返回一个void *型的地址呢?这是由于,malloc函数是一个通用型函数,我们无论申请什么类型(int、float、char......)都是使用malloc函数去申请的,malloc函数也不能智能地识别到我们想要申请什么类型的内存,所以就干脆来个一刀切,全部都给你返回一个void *型的地址,到时候你需要使用你自己申请的地址的时候,就强制类型转换一下,就可以使用了。如:int *p = (int *)malloc(1000*sizeof(int));就是申请了1000个int类型(4000字节)的空间,将返回的void *类型地址强制转换成int *类型,然后在将该地址赋值到int * 类型的指针变量p中。还需要注意一点:C语言中的所有数值必须是有类型的,void类型也是一种类型,所以malloc函数要返回堆内存的首地址,就必须把首地址赋值成万能类型void;而不是没有类型。

原文地址:https://www.cnblogs.com/xing-ting/p/9718782.html

时间: 2024-08-05 06:50:06

C语言中malloc函数的理解的相关文章

c语言中free函数的理解

最近在复习c语言的时候再次用到了malloc函数和free函数,此处着讲解一下自己对这两个函数的理解和认识. 一. malloc函数和free函数的基本概念和基本的用法 对于malloc函数: 1. 包含的头文件:<mallloc.h> 或者<stdlib.h> 2. 函数的原型:void *malloc(unsigned int NumBytes); 3. 函数功能: 该函数分配了NumBytes个字节的内存空间,如果成功,则返回指向这块内存的指针.如果分配失败,则返回一个空指针

C语言中malloc函数的简介

malloc函数 (1)解释malloc函数作用 malloc的全称是memory allocation,中文叫动态内存分配. malloc函数是想系统申请分配指定size个字节的内存空间.malloc的返回类型是void*类型.void*表示为确定类型的指针.C/C++规定void*类型可以强制转换为任何其它类型的指针. (2)全名 void * malloc(size_t size); (3)原型 extern void *malloc(size_t size); (4)头文件 #inclu

对c语言中static函数的理解

先看看前两篇博客:个人对头文件的理解.对声明和定义的理解. static 函数只在定义该static函数的cpp中可见,在其他cpp中是不可见的. 举个例子,我建立了一个project,该project中有三个文件,一个头文件,和两个cpp文件.文件内容如下: 在build该project时会出错,错误提示是fun()函数声明了却未定义. 为什么编译器没有找到fun()函数的定义呢?我明明在Source.cpp中定义了fun()函数呀. 原因很简单:static函数的作用域很小,只在本cpp中有

C语言中malloc()和free()函数的具体作用

本文想就C语言中malloc()和free()函数的具体作用做出一些说明,这些细节大家在使用过程中很有可能会忽略. 在C语言中要动态的释放内存,就必然要用到指针,将动态分配获得的空间地址赋值给指针.C语言中动态分配内存的函数为malloc(), 在用完后,要及时调用free()函数释放.理论上,这样是安全的,但其实这样是不安全的,因为free()函数仅仅是告诉操作系统,这块空间我不用了,操作系统收回空间.而指向这块空间的指针并没有改变,它的值仍然指向这块空间.这样,我就可以继续使用该指针操作内存

C语言中malloc()和calloc()c函数用法

C语言中malloc()和calloc()c函数用法 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小. void *calloc(size_t numElements,size_t sizeOfElement); 如果调用成功,函数mall

C语言中system()函数的用法总结(转)

system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码: 1 #include <sys/types.h> 2 #include <sys/wait.h> 3 #include <errno.h> 4 #include <unistd.h> 5 6 int system(const char * cmdstring) 7 { 8 pid_t pid; 9 int status; 10 11 12 if(cmdstri

C语言中qsort函数用法

C语言中qsort函数用法-示例分析  本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort函数包含在<stdlib.h>的头文件里,本文中排序都是采用的从小到大排序. 一.对int类型数组排序 int num[100]; int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num

(转)C语言中Exit函数的使用

C语言中Exit函数的使用 exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用.在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值.. exit(1)表示进程正常退出. 返回 1;exit(0)表示进程非正常退出. 返回 0.进程环境与进程控制(1): 进程的开始与终止 1. 进程的开始:C程序是从main函数开始执行, 原

R语言中apply函数

前言 刚开始接触R语言时,会听到各种的R语言使用技巧,其中最重要的一条就是不要用循环,效率特别低,要用向量计算代替循环计算. 那么,这是为什么呢?原因在于R的循环操作for和while,都是基于R语言本身来实现的,而向量操作是基于底层的C语言函数实现的,从性能上来看,就会有比较明显的差距了.那么如何使用C的函数来实现向量计算呢,就是要用到apply的家族函数,包括apply, sapply, tapply, mapply, lapply, rapply, vapply, eapply等. 目录