【引言】
指针的用处:
(1)为函数提供修改变量值的手段
(2)为c语言的动态内存分配系统提供支持
(3)为动态数据结构提供支持(eg.链表,队列,二叉树)
(4)改善某些子程序的效率
1.函数malloc()
功能:会返回一个指向该内存首地址的指针,如果系统不能提供足够的空间,则会返回NULL
原型:void *malloc(unsigned int size);
【其中*malloc是指针函数,代表该函数会返回一个void类型的指针】
【void*类型指针——通用指针或者无类型指针,通常被用来说明基类型未知的指针(也就是说声明了一个指针,但是不知道他可以指向哪一种基类型的数据)】
【在malloc函数运用中如果要把函数返回值赋给某个指针,那么需要根据该指针的类型,将返回的指针值强行转为所需类型,然后再进行赋值 *** 作。eg. int *pi=NULL;pi=(int*)malloc(2) 则是将 void*类型强制转换为int*,然后再赋值给int类型指针变量pi,即用int类型指针变量pi指向指向这段存储空间的首地址】
【不知道字节数的时候——malloc(sizeof(int))】
2.函数calloc()
功能:给若干同类型的数据项分配连续的存储空间,并将其赋值为0
原型:void *calloc(unsigned int num,unsigned int size);
【calloc函数相当于声明了一个一维数组】
【num表示向系统申请内存空间的数量,size表示申请的每个空间的字节数,确定了数组元素的类型】
【如果函数调用成功,会返回一个指向void的连续储存空间的首地址,否则会返回空指针NULL】
【与malloc相同的是,如果想要将函数的返回地址赋给某个指针变量,那么应该先根据这个指针的类型,强制性的将其转为与指针基类型相同的数据类型,然后再进行赋值 *** 作。eg. float *pf=NULL; pf=(float*)calloc(10,sizeof(float))这里是指向系统申请10个连续的float类型存储单元,并用指针pf指向该连续内存的首地址,此时系统申请的总的内存字节数为10*sizeof(float),其实也就等同于pf=(float*)malloc(10*sizeof(float))】
小结:从安全的角度上考虑,函数calloc()要比函数malloc()更加安全,因为calloc()可以自动将分配的内存初始化为0
3.函数free()
功能:释放向系统动态申请的由指针p指向的存储空间
原型:void free(void*p);
【该函数没有返回值】
【唯一的形参p是由malloc()或者是calloc()申请内存的时候返回的地址】
【该函数执行以后,会将以前由p指向的内存返回还给系统,以便系统重新支配】
4.函数realloc()
功能:改变原来分配空间的大小
原型:void *realloc(void *p,unsigned int size);
【将指针p所指向的存储空间的大小改为size个字节,函数的返回值是新分配的存储空间的首地址,与原来分配的首地址不一定相同】
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)