Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从函数返回浮点数组?_C_Arrays_Function_Pointers_Return - Fatal编程技术网

C 如何从函数返回浮点数组?

C 如何从函数返回浮点数组?,c,arrays,function,pointers,return,C,Arrays,Function,Pointers,Return,输出将k的值显示为0.000,但它应该包含从funcTest()返回的实际值 在代码中,float p[size]是函数funcTest()的本地项,因此不能从函数返回它的地址,并期望它在调用方中有效。一旦funcTest()函数结束,p将不再存在。然后,由于内存访问无效,任何使用返回值的尝试都将导致错误 相反,您可以将p设为指针,使用或族动态分配内存,然后将该指针返回给调用者。动态分配的内存的生存期将等于程序的整个执行过程(除非手动解除分配),因此,即使在从函数返回后,在调用者中,返回的指针仍

输出将
k
的值显示为
0.000
,但它应该包含从
funcTest()
返回的实际值


在代码中,
float p[size]
是函数
funcTest()
的本地项,因此不能从函数返回它的地址,并期望它在调用方中有效。一旦
funcTest()
函数结束,
p
将不再存在。然后,由于内存访问无效,任何使用返回值的尝试都将导致错误


相反,您可以将
p
设为指针,使用或族动态分配内存,然后将该指针返回给调用者。动态分配的内存的生存期将等于程序的整个执行过程(除非手动解除分配),因此,即使在从函数返回后,在调用者中,返回的指针仍将有效。

返回局部变量。所以,在函数的末尾,局部变量被清除,不再存在。您应该使用
malloc

float *funcTest(int *a, int size)
{
    float *p = malloc(sizeof(float) * size);

当您不再使用
free
时,不要忘记释放内存。如果忘记,将出现内存泄漏

p
是一个自动局部变量,一旦函数返回,它将不再存在。返回指向它的指针将调用未定义的行为

动态分配
p

float *p = malloc(size*sizeof(float)); 
完成后释放分配的内存

float *k;
k = funcTest(&a[0],size);
if(k == NULL)             // Check for null pointer
    exit(0);
float *temp = k;
for(i =0; i<size; i++){
    printf("%f\n",*k);
    k++;
}
free(temp);              // Free allocated memory
return 0;
float*k;
k=funcTest(&a[0],大小);
if(k==NULL)//检查空指针
出口(0);
浮动*温度=k;

对于(i=0;i,正如前面的人指出的,您试图返回堆栈分配的变量(函数中的局部变量),这意味着您指向的内存在函数退出后无效(它在某些实现中被清除,但实际上它的行为没有定义)

解决方案是使用前面指出的
malloc
,或者传递指向函数的指针(从而避免
malloc
free
),保持调用函数堆栈上的分配

i、 e.(这可能不起作用,它没有经过测试,只是在这里演示这个想法):

#包括
#包括
int funcTest(浮点*p,int*a,int size)
{
int i;
对于(i=0;i#包括
#包括
void funcTest(int*a、int size、float*输出)
{
输出=(浮点*)malloc(sizeof(浮点)*大小);
int i;
对于(i=0;i对于(i=0;ip将在离开方法“functest”后被销毁)。因此,您收到的指针根本无效。@SouvikKundu不要忘记在您不再需要时释放内存。如果您忘记了,您将有一个内存泄漏注意:不需要返回数组。只需直接从
main
@CoolGuy-Yap打印
p
,您是对的。我甚至没有看这部分代码。。。我会解决这个问题:-)另外,funcTest不需要返回什么,可以是
void funcTest(float*p,int*a,int size)
@Garf365,yap,这在这里是正确的,但是使用错误检查是很好的做法,所以我留下了一个
return 0
,以向正确的方向推进…;-)
float *p = malloc(size*sizeof(float)); 
float *k;
k = funcTest(&a[0],size);
if(k == NULL)             // Check for null pointer
    exit(0);
float *temp = k;
for(i =0; i<size; i++){
    printf("%f\n",*k);
    k++;
}
free(temp);              // Free allocated memory
return 0;
#include <stdio.h>
#include <stdlib.h>

int funcTest(float *p, int *a, int size)
{
    int i;
    for(i=0; i< size; i++){
        p[i] = *a;
        p[i]=p[i]/2;
        a++;
    }
    for(i =0; i<size; i++){
        printf("%f\n",p[i]);
    }
    // we can use the return value for errors.
    return 0;
}

int main()
{
    int a[4] = {1,5,3,7};
    float p[4] = {0};
    int size = 4;
    int i;
    funcTest(p, a, size);
    for(i =0; i<size; i++){
        printf("%f\n",p[i]);
    }
    return 0;
}
#include <stdio.h>
#include <stdlib.h>

void funcTest(int *a, int size, float *output)
{
    output = (float *) malloc(sizeof(float) * size);
    int i;
    for(i=0; i< size; i++){
        output[i] = *a;
        output[i]=output[i]/2;
        a++;
    }
    for(i =0; i<size; i++){
        printf("%f\n",output[i]);
    }
}

int main()
{
    int a[4] = {1,5,3,7};
    int size = 4;
    int i,j;
    float *k;
    funcTest(&a[0],size, k);
    for(i =0; i<size; i++){
        printf("%f\n",k);
        k++;
    }
    return 0;
}