繁体   English   中英

从C函数返回2D数组

[英]Returning a 2D array from c function

我是一名Python程序员,编写了一些c(包装在ctypes中)以加快一些紧密的循环。 我在使用二维数组(*double)[2]的函数时遇到了麻烦,对它做了一些事情然后将其返回。 函数如下所示:

double *process(int n, double (*results)[2], ...) {
    // Do some things to results
    return results;
}

在此,n是第一级结果中的元素数。 这不会编译,显然我是从不兼容的指针类型返回的。 使它return *results允许它编译和运行(所有包含的逻辑都可以),但是在返回时出现段错误。 使函数成为double **并返回任意数量的* s不会让我编译。

显然我在这里是个白痴,这一点都不奇怪,因为我不太了解c指针。 我需要做些什么才能使这项工作? 我还有另一个函数,它返回double *正常工作,因此显然与2D数组有关。

如果您只是想获得新results ,甚至不需要返回任何内容。 数组按地址而不是值传递。

void process(int n, double results[][2], ...) {
    // Do some things to results,
    results[n][0] = 1.0l;
    // And no need to return.
}
int main(){
    double array[2][2] = { .0 };
    printf( "Before process: %lf", array[1][0] );
    process( 1, array );
    printf( "After process: %lf", array[1][0] );
}

它应该输出:

Before process: 0.0000000000
After process: 1.0000000000

返回二维数组,您需要使用

double **

要将2D数组用作函数process()中的参数,可以使用

double *results[2]

要么

double results[2][]

函数的返回值只需要一1D array作为返回值。 要使其与2D数组一起使用,请将其double **

返回时,仅返回results 不要在其前面加上任何*

我想你想要这个:

double ** process(int n, double ** results)
{
    /* Do stuffz */
    return results;
}

您可能想返回一个指向二维数组的指针。 在这种情况下,您将必须使用:

double (*process (int n, double results[][2], ...))[2] {
  return results;
}

这基本上意味着“返回两个double的2个元素的指针”

或者,以某种方式使其更具可读性:

typedef double arrayType[2];

arrayType * process(int n, double results[][2]) {
    return results;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM