无法通过使用C中函数的指针返回数组来解决错误?
我试图通过一个函数接收一些浮点变量,然后将它们传递给main,并将它们存储在main中的另一个数组中。数组的大小由用户指定,因此我使用可变长度数组。 我已经搜索并阅读了有关从函数返回数组的类似问题,但无法找到代码中错误的解决方案 为方便起见,我总结了原始代码,只包含了与此问题相关的行无法通过使用C中函数的指针返回数组来解决错误?,c,function,visual-c++,return-type,C,Function,Visual C++,Return Type,我试图通过一个函数接收一些浮点变量,然后将它们传递给main,并将它们存储在main中的另一个数组中。数组的大小由用户指定,因此我使用可变长度数组。 我已经搜索并阅读了有关从函数返回数组的类似问题,但无法找到代码中错误的解决方案 为方便起见,我总结了原始代码,只包含了与此问题相关的行 float*receiveFloatValues(int numOfValues); 内部主(空) { int数值; 浮动*接收值; printf(“\n有多少个值?”); scanf(“%d”和numberOfV
float*receiveFloatValues(int numOfValues);
内部主(空)
{
int数值;
浮动*接收值;
printf(“\n有多少个值?”);
scanf(“%d”和numberOfValues);
receivedValues=receiveFloatValues(numberOfValues);
浮点值数组[numberOfValues];
用于(int计数器=0;计数器
我的预期结果是显示从用户收到的浮点值列表,但我收到以下错误消息:
C2057:预期的常量表达式
C2133:未知大小
C2466:无法分配大小为0的常量数组您不能使用
静态VLA,只需使用malloc
和free
,如下所示:
#include <stdio.h>
#include <stdlib.h>
float *receiveFloatValues(int numOfValues);
int main(void)
{
int numberOfValues;
float *receivedValues;
printf("\nHow many values? ");
scanf("%d", &numberOfValues);
receivedValues = receiveFloatValues(numberOfValues);
float *valuesArray = malloc(sizeof(float) * numberOfValues);
for (int counter = 0; counter < numberOfValues; counter++)
{
valuesArray[counter] = receivedValues[counter];
}
for (int counter = 0; counter < numberOfValues; counter++)
{
printf("\nvaluesArray[%d]: %f", counter, valuesArray[counter]);
}
free(receivedValues); // free memory here.
free(valuesArray);
return(0);
}
float *receiveFloatValues(int numOfValues)
{
float *values = malloc(sizeof(float) * numOfValues); // allocate memory here.
for (int counter = 0; counter < numOfValues; counter++)
{
printf("\nEnter value %d: ", counter + 1);
scanf("%f", &values[counter]);
}
return(values);
}
#包括
#包括
浮点*接收浮点值(整数数值);
内部主(空)
{
int数值;
浮动*接收值;
printf(“\n有多少个值?”);
scanf(“%d”和numberOfValues);
receivedValues=receiveFloatValues(numberOfValues);
float*valuesArray=malloc(sizeof(float)*numberOfValues);
用于(int计数器=0;计数器
为什么需要值[numofalues]
成为静态的?“所有具有静态存储持续时间的对象应在程序启动前初始化(设置为其初始值)。”(VLA不能满足此要求)请参阅@CoffeeTableEspresso我想我应该使用static
,因为否则我会将局部变量的地址传递给main,这通常被认为是不正确的。Omid我的答案应该适用于您,正如@DavidC.Rankin提到的,您不能有一个静态VLA。返回该值时,该代码仍然无法编译,并出现以下错误:C2057:预期的常量表达式,C2133:“valuesArray”:未知大小,C2466:无法分配常量大小的数组0I实际上是在我的计算机上编译的machine@Omid您的C编译器(MSVC)不符合标准它不支持可变长度数组。您需要在main中使用malloctoo@AnttiHaapala谢谢,但我还不知道如何使用malloc
。需要先学习,这对我来说似乎很复杂。@Omid没有malloc你真的无法做到这一点,特别是如果你的编译器不能正确支持VLAs。