手把手入门C语言—动态创建数组

首先实现用户输入输出数组

#include <stdio.h>
#include <stdlib.h>

/**
  动态创建数组 
  

  动态数组的创建
  1、让用户输入一个长度
  2、根据长度,分配内存空间
  3、让用户把数组中的元素依次的赋值
  4、接收用户输入扩展数组长度
  5、根据扩展的长度重新分配空间
  6、把扩展长度的元素让用户赋值;
  7、输出数组

  malloc(长度);
  realloc(数组,长度)重新分配空间

*/


main(){
	
	// 动态数组的创建 
	printf("请输入您要创建数组的长度:\n"); 
	
	// 1、让用户输入一个长度
	int length;
	scanf("%d",&length);
	printf("您输入的数组长度为:%d\n",length);
	
	// 2、根据长度,分配内存空间
	int* iArray = malloc(length*4);
	
	// 3、让用户把数组中的元素依次的赋值
	int i;
	for(i=0;i<length;i++){
		printf("请输入iArray[%d]的值:",i);
		scanf("%d",iArray+i);
	}
	// 4、接收用户输入扩展数组长度
	// 5、根据扩展的长度重新分配空间
	// 6、把扩展长度的元素让用户赋值;
	// 7、输出数组
	for(i=0;i<length;i++){
		printf("iArray[%d]=%d\n",i,*(iArray+i));
	}
	
	system("pause");
}

运行结果:
在这里插入图片描述

使用 realloc 函数扩展数组长度

当前的数组长度不足够用了,使用重新分配函数(realloc(数组,长度)重新分配空间

#include <stdio.h>
#include <stdlib.h>

/**
  动态创建数组
  使用到了:输出函数  printf();
  输入函数  scanf("占位符",内存地址);
  指针
  realloc():重新分配 
  

  动态数组的创建
  1、让用户输入一个长度
  2、根据长度,分配内存空间
  3、让用户把数组中的元素依次的赋值
  4、接收用户输入扩展数组长度
  5、根据扩展的长度重新分配空间
  6、把扩展长度的元素让用户赋值;
  7、输出数组

  malloc(长度);
  realloc(数组,长度)重新分配空间

*/


main(){
	
	// 动态数组的创建 
	printf("请输入您要创建数组的长度:\n"); 
	
	// 1、让用户输入一个长度
	int length;
	scanf("%d",&length);
	printf("您输入的数组长度为:%d\n",length);
	
	// 2、根据长度,分配内存空间
	// 因为数组为连续的内存空间,所以定义为指针类型 
	// malloc(length*4):为定义 length 个内存空间,长度为 4(因为为 int 类型) 
	int* iArray = malloc(length*4);
	
	
	// 3、让用户把数组中的元素依次的赋值
	int i;
	for(i=0;i<length;i++){
		printf("请输入iArray[%d]的值:",i);
		scanf("%d",iArray+i);
	}
	// 4、接收用户输入扩展数组长度
	int suppLength;
	printf("请输入您要扩展数组的长度:\n"); 
	scanf("%d",&suppLength);
	printf("您要扩展数组的数组长度为:%d\n",suppLength);
	
	// 5、根据扩展的长度重新分配空间(扩展完数组的长度时,数组的整体长度要变大) 
	// 第一个参数为分配那个就修改那个数组,第二个参数为长度(原来的+扩展的) 
	iArray = realloc(iArray,(length+suppLength)*4); 
	
	// 6、把扩展长度的元素让用户赋值;
	// 此时的长度是从 length 的长度开始,结束位置为 length+suppLength
	for(i=length;i<length+suppLength;i++){
		printf("请输入iArray[%d]的值:",i);
		scanf("%d",iArray+i);
	}
	
	// 7、输出数组
	// 打印的时候也要用 length+suppLength 作为结束 
	for(i=0;i<length+suppLength;i++){
		printf("iArray[%d]=%d\n",i,*(iArray+i));
	}
	
	system("pause");
}

运行结果:
在这里插入图片描述

打印动态数组的内存地址

#include <stdio.h>
#include <stdlib.h>

/**
  动态创建数组
  使用到了:输出函数  printf();
  输入函数  scanf("占位符",内存地址);
  指针
  realloc():重新分配 
  

  动态数组的创建
  1、让用户输入一个长度
  2、根据长度,分配内存空间
  3、让用户把数组中的元素依次的赋值
  4、接收用户输入扩展数组长度
  5、根据扩展的长度重新分配空间
  6、把扩展长度的元素让用户赋值;
  7、输出数组

  malloc(长度);
  realloc(数组,长度)重新分配空间
?
*/


main(){
	
	// 动态数组的创建 
	printf("请输入您要创建数组的长度:\n"); 
	
	// 1、让用户输入一个长度
	int length;
	scanf("%d",&length);
	printf("您输入的数组长度为:%d\n",length);
	
	// 2、根据长度,分配内存空间
	// 因为数组为连续的内存空间,所以定义为指针类型 
	// malloc(length*4):为定义 length 个内存空间,长度为 4(因为为 int 类型) 
	int* iArray = malloc(length*4); // 分配出指定元素的总空间:length个元素,3 * 4 = 12; 
	printf("%#x\n",&iArray);
	
	// 3、让用户把数组中的元素依次的赋值
	int i;
	for(i=0;i<length;i++){
		printf("请输入iArray[%d]的值:",i);
		scanf("%d",iArray+i);
		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
	}
	// 4、接收用户输入扩展数组长度
	int suppLength;
	printf("请输入您要扩展数组的长度:\n"); 
	scanf("%d",&suppLength);
	printf("您要扩展数组的数组长度为:%d\n",suppLength);
		
	// 5、根据扩展的长度重新分配空间(扩展完数组的长度时,数组的整体长度要变大) 
	// 第一个参数为分配那个就修改那个数组,第二个参数为长度(原来的+扩展的) 
	iArray = realloc(iArray,(length+suppLength)*4); 
	printf("%#x\n",&iArray);
		
	// 6、把扩展长度的元素让用户赋值;
	// 此时的长度是从 length 的长度开始,结束位置为 length+suppLength
	for(i=length;i<length+suppLength;i++){
		printf("请输入iArray[%d]的值:",i);
		scanf("%d",iArray+i);
		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
	}
	printf("\n");
	// 7、输出数组
	// 打印的时候也要用 length+suppLength 作为结束 
	for(i=0;i<length+suppLength;i++){
		printf("iArray[%d]=%d\n",i,*(iArray+i));
		printf("iArray%d的内存地址为:%#x\n",i,iArray+i);
	}
	system("pause");
}

在这里插入图片描述
在这里插入图片描述
由上图可知,malloc(length*4) 分配出指定元素的总空间:length个元素,3 * 4 = 12;

因为 int 为 4 个长度,所以末位数字差距为 4 个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值