数据结构_P8

/*
	静态内存分配:a[5]一直都是5了,不会再改变,(也可以认为只要没有用到malloc()函数,就是静态内存分配)
	本代码是动态内存分配:malloc函数动态改变数组内存,malloc(20)返回的是申请内存第一个地址。
	用法:强制转换(int *)malloc(sizeof(int) * len)
	2016年6月1日14:13:08
*/

# include <stdio.h>
# include <malloc.h>    //注意用malloc()函数要加头文件    

int main(void)
{
	int a[5] = {4, 10, 2, 8, 6};  //想象一下数组内存分配情况,a指向a[0]地址,a+2指向a[2]地址,*(a+2)代表a[2]值。a[5]的长度5是死的,这属于静态内存分配!
	                              //现在需要对数组分配内存或长度进行修改,用malloc函数!
	int len;
	printf("请输入你想要对a[]数组分配的长度大小: len = ");
	scanf("%d", &len);  //注意这里有个取地址符!!!按照变量地址把输入的值传送给变量。

	int *pArr = (int *)malloc(sizeof(int) * len);  //malloc(20)为申请一个20字节内存,malloc函数返回第一个字节地址!
 //第一个字节地址没有太大含义,因为不知道第一个地址代表的是int、double、char还是啥?不知道数组第一个元素占多大。
//所以要进行强制转换,(char *)、(int *)、(double *)可以说明元素是啥类型。
	
/*	pArr[0] = 4;   //等价于a[0] = 4;
	*(pArr + 1) = 10;  //等价于pArr[1] = 10;  ,可以一直增加下去到指定的20(也可以在改变啊),数组不固定长度了
	printf("%d, %d\n", *pArr, pArr[1]);
*/

	//重写上面3行代码,这里我们可以把pArr当做普通数组来使用.
	printf("请分别输入数组的值:");
	for(int i=0; i<len; i++)
	{
		scanf("%d", &pArr[i]);     //给数组赋值
	}
	for(i=0; i<len; i++)   //注意这里C语言有个问题:前面for已经定义了int i,这里不能再写int i,i已经定义了,不能重复定义!!!
		printf("%d ", pArr[i]);   //输出数组所有值


//以上是动态分配,以下是动态释放
	free(pArr);   //把pArr所代表的动态分配的20个字节的内存释放,一定要注意内存释放,malloc申请的内存系统不会自动释放。
	
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值