我怎么能读到让我们说10个浮点数并将它们存储在数组中而不浪费任何内存?
答案 0 :(得分:2)
int size = 10;
float vet[size];
for(i = 0; i < size; i++){
scanf("%f", &vet[i]);
}
尽可能简单:)
答案 1 :(得分:2)
啊哈。这不是读浮标的问题,而是记忆。你读了 i ,你需要一个完全包含 i 浮点数的数组。
这确实闻起来像家庭作业,这很好,但我太老了,无法给你完整的答案。所以我会告诉你,你需要的是一个名为 malloc()的C函数和一个名为 sizeof的C运算符(它看起来像一个函数但它实际上已经构建到语言中)
int n,index;
float temp;
scanf("%d",&n);
float *pValues=(float *)calloc(n,sizeof(float));
for(index=0;index<n;index++) {
scanf("%f",&temp);
*(pValues+index)=temp;
}
我会做两件事改变:
malloc
更加惯用
*(pValues+index)
完全等同于pValues[index]
。 所以我将其重写为:
int n,index;
float temp;
scanf("%d",&n);
float *pValues=(float *)malloc(n*sizeof(float));
for(index=0;index<n;index++) {
scanf("%f",&temp);
pValues[index]=temp;
}
让我们再看一下代码的转换。您有pValues
,这是指向float
的指针。您有&temp
,它也是指向float
的指针,因为&
是地址操作符,temp
是float
。 AND,你只是用索引做指针算术。所以,我们可以再重写一次:
int n,index; // Don't need temp
scanf("%d",&n);
float *pValues=(float *)malloc(n*sizeof(float));
for(index=0;index<n;index++) {
scanf("%f",pValues+index);
}
现在,测验问题:如果你做了循环会发生什么
for(index=0;index<n;index++) {
scanf("%f",pValues++);
}
答案 2 :(得分:0)
你必须更具体地解决这个问题。
除非你需要对这些数字做其他事情,否则最简单的节省内存的方法就是不要将它们存储在一个数组中。
这听起来像是你想要的东西。
sum = 0;
做
读取当前
sum + =当前
虽然(你还没读过10个数字);
答案 3 :(得分:0)
您的问题的答案是您无法向数组添加内容并期望数组使用任何内存。
答案 4 :(得分:0)
float arr[10];
for(i = 0; i < 10; i++){
scanf("%f", &arr[i]);
}
我知道,它就像上面那样,但是如果没有优化的话,不会使用额外的int。和合
使用更少的内存我们下面的代码。它们都被读入一个数组,但只有最后一个要读入的是数组:
float arr[1];
for(i = 0; i < 10; i++){
scanf("%f", &arr[0]);
}
答案 5 :(得分:0)
听起来像是家庭作业。
从输入中读取浮点数。 乘以单个浮点数的大小 在浮点数指针中分配存储地址的确切字节数 从输入中读取浮点数的循环 有一个循环,将数组中的所有浮点数相加
我猜这里的功课是实现术语指针和数组之间的连接,虽然你可以在没有任何数组索引的情况下做到这一点,但你的问题暗示你必须使用数组。