静态内存和动态内存的比较

 

# include <stdio.h>
# include <malloc.h>

int main(void)
{
	int a[5]; //如果int占4个字节的话,则本数组总共包含有20个字节,每四个字节被当做了一个int变量来使用
	int len;
	int * pArr;
	int i;

	//动态的构造一维数组
	printf("请输入你要存放的元素的个数: ");
	scanf("%d", &len);
	pArr = (int *)malloc(4 * len);  //第12行  本行动态的构造了一个一维数组, 该一维数组的产度是len, 该数组的数组名是pArr, 该数组的每个元素是int类型  类似于 int pArr[len];
	
	//对一维数组进行操作,  如:对动态一维数组进行赋值
	for (i=0; i<len; ++i)
		scanf("%d", &pArr[i]);

	//对位一维数组进行输出
	printf("一维数组的内容是:\n");
	for (i=0; i<len; ++i)
		printf("%d\n", pArr[i]);
	
	free(pArr); //释放掉动态分配的数组
	

	return 0;
}

# include<stdio.h>

# include<malloc.h>

 

int main(void)

{

int a[5]; // 只有main函数终止的时候, a[5]数组的使用空间才会被释放

// 如果int 占4个字节的话,则本数组总共包含20个字节,每 4 个字节被当做了一个 int 变量来使用

 

 

int len;

int * pArr;

// pArr存放的是系统分配的连续内存空间的第一个字节地址

//又由于 pArr本身是 int *类型,所以pArr指向的是前4个字节

// * pArr 就代表了 前4个字节的整型变量

// pArr 指向的是 一维数组元素,每个元素占4个字节

// * (pArr + 1) 就会指向 当前 pArr所占的字节的后4个字节,依次同理(记住这是连续的内存空间)

 

int i ;

 

 

// 前面讲过 , 所有的指针变量下标都可以转换成指针(指针就是地址,地址就是指针,名称不同) pArr[0] = * pArr;    pArr[2] = * (pArr + 2)

 

 

// 动态的构造一维数组

printf("请输入你要存放的元素的个数:");

  // 我希望程序运行当中,由用户来手动输入,来创建多长的数组

scanf("%d", &len);

 

pArr = (int *)malloc(4 * len);   

// 这行代码 就类似于  写了   int pArr[len]; 只不过这是动态分配的 

一维数组已经动态构造好了,构造就是 造了、搞 的意思

 

//本行动态的构造了一个一维数组,该一维数组的长度是len (int类型变量占 4个字节)

//该数组的数组名是pArr,该数组的每个元素类型是int类型(因为pArr返回的第一个字节的地址当成了整型的地址 (int *)malloc,按整型来划分的)  类似于  int pArr[len];

 

//这行代码执行完后导致的结果是,我们的操作系统给我们找到了一个20个字节的空闲空间,分配给我们这个当前的程序,并且pArr指向的是前4个字节

 

 

 

// 对一维数组进行操作

// 对动态一维数组进行赋值

printf("注意空格隔开,请分别输入5个你要赋的值:");

for(i=0; i<len; ++i)

{

scanf("%d",&pArr[i]); 

}

 

// 对一维数组进行输出

 

printf("一维数组的内容是:\n ");//加个提示符

for(i=0; i<len; ++i)

printf("%d\n",pArr[i]);

 

free(pArr); //释放掉动态分配的数组, 静态数组不能手动释放

 

return 0;

}

输出结果:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值