手把手入门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 个字节。