/*
静态内存分配: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;
}
数据结构_P8
最新推荐文章于 2024-09-03 23:46:50 发布