从C中的函数返回数组

Android开发

我只是把这个弄得一团糟。我有一个函数,该函数应该采用一维数组,使用其值进行一些计算,然后返回包含计算结果的类似数组。我不必关心它是否返回相同的数组(带有新值)还是在不同的内存位置创建一个新数组并将其返回。这是我目前所拥有的。到处都有错误,但是我不知道我在做什么错。有人可以帮忙吗?

double s  = 10;
double b  = 2.6666;
double r  = 28;

double (*newVertex(double vtx[3] )) [] {

    static double newVtx[3];
    /*  Coordinates  */
    double x = vtx[0];
    double y = vtx[1];
    double z = vtx[2];

    double dt = 0.001;

    double dx = s*(y-x);
    double dy = x*(r-z)-y;
    double dz = x*y - b*z;
    newVtx[0] = x + dt*dx;
    newVtx[1] = y + dt*dy;
    newVtx[2] = z + dt*dz;

    return &newVtx;
}

int main(int argc, char *argv[]) {
    int i;

    /* Arrays to hold the coordinates */
    double thisPt[3] = {1, 1, 1};
    double nextPt[3];

    for (i=0;i<1000;i++) {
        printf("%5d %8.3f %8.3f %8.3f\n", i, thisPt[0], thisPt[1], thisPt[2]);
        nextPt = newVertex(&thisPt);
        thisPt = nextPt;
    }
    return 0;
} 
姆彭科夫

首先,对我来说,您的函数声明看起来不必要地复杂。

如果您不打算创建一个新的数组,那么应该是这样的:

void function_name(double *parameter) {
    // code to change the parameter in place here    
}

或者,如果您想明确说明数组的长度(请参阅注释以获取更多信息):

#define ARRAY_SIZE 3
void function_name(double parameter[ARRAY_SIZE]) {
    // code to change the parameter in place here    
}

如果您打算创建一个新的数组,则可以执行以下操作:

double * function_name(double *parameter) {
    double *result = (double *)malloc(sizeof(double * number_of_elements));
    // read parameter, write into result
    return result;
}

上面的代码段假设number_of_elements固定且已知。如果不是,那么您需要将它们作为附加参数来处理。

接下来,这有几个原因,这是很糟糕的:

double (*newVertex(double vtx[3] )) [] {    
    static double newVtx[3];
    // update newVtx    
    return &newVtx;
}

return语句返回局部变量的地址。在这种情况下,变量是静态的,因此一旦函数退出,该变量将不会被覆盖。但是,它真的真的必须是静态的吗?并使其静止就足够了吗?考虑这样的代码:

double *v1 = newVertex(old_vertex);
double *v2 = newVertex(old_vertex);

您可能会觉得自己可以分别处理两个顶点,但是它们指向的是内存中完全相同的位置:静态变量的位置。动态地为数组分配空间(malloc,calloc)并返回指向已分配内存的指针是更为常见的做法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在cython中返回numpy数组定义的c函数

来自分类Dev

从C ++函数返回数组

来自分类Dev

从C中的函数返回合并的数组

来自分类Dev

从C中的函数传递和返回2个数组

来自分类Dev

从C中的函数返回char数组的首选方法

来自分类Dev

函数返回指向C中数组类型的指针

来自分类Dev

从C ++中的函数返回多个数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

Python中的C函数:返回数组和变量

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

如何从C头文件中的函数返回多维字符数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

从C函数中创建的数组返回数组元素?

来自分类Dev

从C#中的C ++函数返回数组和结构

来自分类Dev

在C中返回字符串数组的函数

来自分类Dev

从C ++中的函数返回2D char数组并打印

来自分类Dev

函数可以在C中同时返回数组和变量吗?

来自分类Dev

返回数组C函数

来自分类Dev

函数返回指针与函数返回数组在C中

来自分类Dev

如何将数组从函数“返回”到c中的main

来自分类Dev

从C ++中的函数返回多个数组

来自分类Dev

在函数中传递2d数组-从C中的函数返回2d数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

如何在C / C ++函数中返回char *数组?

来自分类Dev

从C函数中的数组中返回项目

来自分类Dev

从C中的函数返回整数数组值

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

在C函数中返回char数组

来自分类Dev

检索返回C ++中数组的函数的输出