C语言数组长度不定时的处理方法
突然想到一个程序不知道要输入多少数据时应该怎么处理,此时想到了sizeof。写了如下代码,结果如下,发现并没什么用。如果可以修改源代码,完全可以在代码中修改数组长度。
#include<stdio.h>
int main()
{
int sort(int a[],int n);//函数声明
int r[]={7,2,8,5,9,3};
int n=sizeof(r)/4;
printf("有%d个数\n",n);
int min=sort(r,n);
printf("最小值为%d",min);
}
int sort(int a[],int n)
{
//注意:此处为a[0]的地址有8位
printf("地址为%d位\n",sizeof(a));
int min=a[0];
for(int i=0;i<n;i++)
{
if(min>a[i])
min=a[i];
}
return min;
}
然后我做了下修改,使其在执行文件中改变数组长度。以-1为结束的标志,结果如下,虽然可以实现随意的输入并挑出其中最小的数,但终究还是有上限的最多输入100个数
#include<stdio.h>
int main()
{
int sort(int a[],int n);//函数声明
int r[100]={0},i;
for(i=0;;i++)
{
scanf("%d",&r[i]);
if(r[i]==-1)
break;
}
printf("有%d个数 \n",i);
int min=sort(r,i);
printf("最小的为%d",min);
}
int sort(int a[],int n)
{
int min=a[0];
for(int i=0;i<n;i++)
{
if(min>a[i])
min=a[i];
}
return min;
}
c中有个叫动态内存的东西,还是比较复杂因为需要提前输入需要的数据数目。
#include<stdio.h>
#include<stdlib.h>
int n,i;
int main()
{
double sort(double a[]);
printf("请输入你要输入的整数个数");
if(scanf("%d",&n)==0)
{
printf("wrong");
goto finish;
}
//分配内存
double *ptd,min;
ptd=(double *)malloc(n*sizeof(double));
printf("请输入%d个数字\n",n);
for(i=0;i<n;i++)
{
scanf("%lf",&ptd[i]);
}
for(i=0;i<n;i++)
{
printf("%2.2lf ",ptd[i]);
}
min=sort(ptd);
printf("\n%2.2lf ",min);
free(ptd); //释放内存
finish:
printf("\ndone");
return 0;
}
double sort(double a[])
{
double min=a[0];
for(i=0;i<n;i++)
{
if(min>a[i])
min=a[i];
}
return min;
}
再次做下修改以字符‘ / ’为结束标志
#include<stdio.h>
#include<stdlib.h>
int i=0,j;
int main()
{
double sort(double a[]);
//分配内存
double *ptd,min;
ptd=(double *)calloc(1,sizeof(double));
scanf("%lf",&ptd[0]);
for(j=0;;j++)
{
i++;
realloc(ptd,sizeof(double)*i);
printf("开辟空间%d\n",sizeof(double)*i);
scanf("%lf",&ptd[i]);
if(getchar()=='/')
break;
}
for(j=0;j<i;j++)
{
printf("%2.2lf ",ptd[j]);
}
min=sort(ptd);
printf("\n最小数字%2.2lf",min);
free(ptd);
return 0;
}
double sort(double a[])
{
double min=a[0];
for(j=0;j<i;j++)
{
if(min>a[j])
min=a[j];
}
return min;
}