题目要求:用户输入数字在(int)范围内,输出用户输入的数字,并输出数组长度。
注:(此处仅写核心代码,比如:那个用mallo申请空间没有判断申请失败(也就是返回值为NULL啦),嘤嘤嘤!)
// malloc + 指针 实现数组扩容 输入1703时输入结束
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *enBigArray(){
int len = 10; // 默认初始化数组长度为10
int i=0;
int num=0;
int *p= (int *)malloc(len*sizeof(int)); // 创建一个长度为10的数组
int *ptemp=p; // 临时的指针指向该"新数组";
while(scanf("%d",&num),num!=1703){
if(i<len){
ptemp[i++]=num; // 如果用户输入的数字个数小于数组长度,则存到该数组
}else{
len*=2; // 如果用户输入的数字个数大于数组长度,则长度扩大为原来的2倍
p = (int *)malloc(len*sizeof(int)); // 申请新的"数组 ";
for(int j=0;j<i;j++){ // 将原来的数组copy到新申请的更大的数组中
p[j]=ptemp[j];
}
p[i]=num;// 将超出的第一个值存到新数组
i++;
free(ptemp);// 释放原数组的空间
ptemp=p; // 临时的指针指向该"新数组";
}
}
for(int j=0;j<i;j++)
printf("%d ",ptemp[j]); // 打印出用户输入的数字
printf("\n%d",len); // 打印数组总长度
}
int main()
{
enBigArray();
}