配内存:malloc() free();

分配内存:malloc() free();

回忆一下,静态数据在程序载入内存时分配,而自动数据在程序执行是分配,并在程序离开该块是销毁。
malloc()函数会找到合适的空闲内存块,这样的内存时匿名的。也就是说,malloc()分配内存,
但是不会为其赋名。然而,它确实返回动态分配内存块的首字节地址。因此可以把该地址赋给一个指针变量
并使用指针访问这块内存。因为char表示1字节,malloc()的返回类型通常被定义为指向char的指针。然后,从ANSIC标准开始,C使用一个新的类型:指向void的指针。该类型相当于一个通用指针。malloc()函数可以用于返回指向数组的指针、指向结构的指针等,所以通常该函数的返回值会被强制转换为匹配的类型。在ANSIIC中,应该坚持使用这种强制转换,提高代码的可读性。然鹅,把指向void的指针赋给任意类型的指针完全不用考虑类型匹配的问题。如果malloc()分配内存失败,将返回空指针。

创建数组的三种方法:

  • 用常量表达式表示数组的维度,用数组名访问数组的元素。auto or static都可

  • 声明变长数组是,用变量表达式表示数组的维度,用数组名访问数组的元素。具有这种特性的数组只能在自动欧诺个内存中创建

  • 声明一个数组,调用malloc(),将其返回值赋给指针,使用指针访问数组的元素 。该指针可以是静态的或者是自动的

通常情况下malloc
要与free配套使用。free函数的参数是之前malloc的返回的地址,该函数释放之前malloc分配的内存。因此动态分配内存的存储器从
调用malloc分配内存到调用free释放内存为止。

原型在stdlib中
#include<stdio.h>
#include<stdlib.h>
int main(void){
double* ptd;
ptd = (double*)malloc(30 * sizeof(double));
int max;
	int number;
	int i = 0;
	
	puts("What is the maximum number of type double entries?");
	if (scanf("%d", &max) != 1)
	{
		puts("Number not correctly entered -- bye.");
		exit(EXIT_FAILURE);
	}

	ptd = (double*)malloc(max * sizeof(double));
	if (ptd == NULL)
	{
		puts("Memory allocation failed.Goodbye.");
		exit(EXIT_FAILURE);
	}


	puts("Enter the values (q to quit):");
	while (i < max && scanf("lf", &ptd[i]) == 1)
		++i;
	printf("Here are your %d entries:\n",number==1);
	for (i = 0; i < number; i++)
	{
		printf("%7.2", ptd[i]);
		if (i % 7 == 6)
			putchar('\n');

	}
	if (i % 7 != 0)
	{
		putchar('\n');
		
	}
	puts("Done");
	free(ptd);
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值