C语言学习笔记_数据结构_链表_01

动态内存分配函数

realloc();

原型

extern void *realloc(void *mem_address, unsigned int newsize);

返回值

如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL

功能&使用

intpn = (int)malloc(4sizeof(int));
int
pnn = (int*) realloc( pn, N*sizeof(int));
为已有指针(pn)重新分配内存大小

  • 内存变大时:
  1. 若原有连续空间足够,则直接在其后开辟空间,不改变首地址
  2. 若原有位置连续空间不够,则另外开辟所需的空间,将pn指向的内容拷贝到新的空间中,并自动释放pn,将新的首地址赋给pnn
  • 内存变小时:
    抛弃内容
#include<stdio.h>
#include<stdlib.h>
#define N 2
int main()
{
	int i;
	int *pn=(int *)malloc(5*sizeof(int));
	printf("the address of pn is:%p\n",pn);
	for(i=0;i<5;i++)
		pn[i] = i+1;
 
	printf("the size of int is:%d\n",sizeof(int));
	int *pnn=(int *)realloc(pn, N*sizeof(int));
	printf("the address of pnn is:%p\n",pnn);
	//printf("the elements in pnn are:");
	//for(i=0;i<5;i++)
	//printf("%3d",pnn[i]);
	printf("the new address of pn is:%p\n",pn);
	printf("the elements in pn are:");
	
	for(i=0;i<5;i++)
	printf("%3d",pn[i]);
	printf("\n");
	//free(pn);
	free(pnn);
	return 0;
}

当为2时
在这里插入图片描述
当N为100000时
在这里插入图片描述
可以看出,原来地址空间不够大时,realloc会另外开辟空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值