malloc 函数,realloc函数,calloc函数

一. malloc函数

void *malloc( size_t size );

malloc函数作用

malloc函数作用是动态开辟一个空间,分配指定字节数的存储区,此存储区中的初始值不确定

malloc返回值

malloc返回一个指向已分配空间的空指针,如果可用内存不足,则返回NULL。
若要返回指向非void类型的指针,请在返回值上使用类型转换。保证返回值所指向的存储空间对任何类型的对象的存储进行适当对齐。
如果size为0,malloc将在堆中分配一个长度为0的项,并返回一个指向该项的有效指针。
总是检查malloc的返回值,即使请求的内存量很小。

举例实现

利用malloc函数动态创建一个数组,并且数组大小由用户输入,并且输出这个数组

#include<stdio.h>
#include<stdlib.h>
int main() {
	int n = 0;
	scanf_s("%d", &n);
	int* ptr = (int*)malloc(sizeof(int) * n);
	
	for (int i = 0; i < n; i++) {
		scanf_s("%d", &ptr[i]);//依次为变量赋值
	}
	printf("您输入的数值为:");
	for (int j = 0; j < n; j++) {
		printf("%d  ", ptr[j]);//输出数据
	}
	return 0;
 }

二.relloc函数

void *realloc( void *memblock, size_t size );

realloc函数作用

realloc函数返回值
realloc函数的作用是更改动态开辟的空间的长度,当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定。

realloc返回值

realloc返回一个指向重新分配(可能移动)内存块的空指针。如果大小为0且buffer参数不为NULL,或者没有足够的可用内存将块扩展到给定大小,则返回值为NULL。
在第一种情况下,释放原始块。
第二,原块不变。返回值指向一个存储空间,该存储空间保证对任何类型的对象的存储进行适当对齐。
若要获得指向非void类型的指针,需要在返回值上使用类型转换。

举例实现
#include<stdio.h>
#include<stdlib.h>
int main() {
	int n = 0;
	scanf_s("%d", &n);
	int* ptr = (int*)malloc(sizeof(int) * n);//动态开辟一个空间
	int* ptr1 = (int*)realloc(ptr,sizeof(int));//调整空间大小
	int* ptr2 = (int*)realloc(NULL, sizeof(int));//申请新的空间,功能和malloc相同
	return 0;
 }




三.calloc函数

void *calloc( size_t num, size_t size );

calloc函数作用

calloc函数的作用是为指定长度的对象,分配能容纳其指定个数的存储空间,并将初始值全部赋为0。

calloc返回值

返回一个指向已分配空间的指针。保证返回值所指向的存储空间对任何类型的对象的存储进行适当对齐。若要获得指向非void类型的指针,需要在返回值上使用类型转换。

使用malloc函数动态开辟一个数组,数组大小由用户输入。

由下图可知当输入3的时候会开辟大小为三个整形的大小的数组
输出为三个0,证明当使用malloc函数开辟数组时会将所有元素初始化为o。
在这里插入图片描述
代码为:

#include<stdio.h>
#include<stdlib.h>
int main() {
	int n = 0;
	scanf_s("%d", &n);
	int* ptr = (int*)calloc(n,sizeof(int));//动态开辟一个空间
	for (int j = 0; j < n; j++) {
		printf("%d  ", ptr[j]);//输出数据
	}
	return 0;
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值