无法通过使用C中函数的指针返回数组来解决错误?

无法通过使用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

我试图通过一个函数接收一些浮点变量,然后将它们传递给main,并将它们存储在main中的另一个数组中。数组的大小由用户指定,因此我使用可变长度数组。 我已经搜索并阅读了有关从函数返回数组的类似问题,但无法找到代码中错误的解决方案

为方便起见,我总结了原始代码,只包含了与此问题相关的行

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。