关闭

数据结构_P8

206人阅读 评论(0) 收藏 举报
分类:
/*
	静态内存分配: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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55147次
    • 积分:1692
    • 等级:
    • 排名:千里之外
    • 原创:128篇
    • 转载:43篇
    • 译文:0篇
    • 评论:10条