c语言:动态内存分配的四个函数

 2024-03-06 04:03:39  阅读 0

struct ListNode *readlist()//完成了链表的创建 
{
	int n;
	struct ListNode *head=NULL,*p1,*p2;
	while(scanf("%d",&n)&&n!=-1)
	{
		p2=(struct ListNode*)malloc(sizeof(struct ListNode));
		if(p2!=NULL)
		{
			p2->data=n;
			p2->next=NULL;
		}
		if(head!=NULL)
		{
			p1->next=p2;
		}
		else
		{
			head=p2;
		}
		p1=p2;
	}
	return head;
} 

我们只需要关注第 7 行,即打开空间的行。 这里我们通过结构体指针进行强制转换。 如果您不了解结构指针也没关系。 我们需要开辟什么样的空间,就用which指针强制转换即可。 如果需要char *,则使用(char *)进行转换。

2.()函数

函数原型:void *(n, size)

它的作用是在动态存储区域中分配n个连续的长度为size的空间,我们可以用它来存储数组。 同上,需要强制转换,转换方法同上。

int *p;
p=(int*)calloc(2,100); 

动态储存分配函数_内存动态分配的库函数为_函数内动态分配内存

因此,我们不必再多说了。 我们这里要讲的是大家需要特别注意的事情。

和...之间的不同:

乍一看,差别并不大,甚至看起来好像一个功能是多余的,但其实并没有那么简单。

当我们使用一个函数时,它所开辟的空间就是一堆杂乱的数据。 因此,有时我们需要将其杂乱的数据清零。 因此函数。 当该函数分配空间时,它可以将空间中的所有数据重置为零。 但正是因为这一步会降低函数的效率。 大多数情况下,我们根本不需要将其重置为零,因此这两个功能是共存的。 理论上来说,它们之间没有本质区别。 但我们更喜欢使用函数,因为它们更高效。

free() 函数

内存动态分配的库函数为_函数内动态分配内存_动态储存分配函数

原型为:void free(void *p)

是的,顾名思义,它的作用就是释放空间,准确的说:释放空指针p分配的空间。 而且它没有返回值,使用起来非常简单。

int *p;
p=(int*)calloc(2,100); 
free(p);

()功能

原型为:void *(void *p, int size)

它的作用是改变函数分配给p的空间大小。

int *p;
p=(int*)calloc(2,100); 
p=(int*)realloc(p,400);

同样的,它和函数一样,它的使用需要强制转换。

总结:

我们将使用的三个空间分配函数在分配失败时都会返回NULL,而失败的原因大多是由于空间不足。 free 函数没有返回值。

以上四个函数都包含在头文件.h中,所以引用时必须使用#

关于实际的动态内存分配,没有太多需要解释的知识。 大多数朋友只需要掌握这些功能的使用即可。 下一期博主会讲一下链表的构造以及链表节点的操作。 好的,晚安。

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码