我是一个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数组有关。
答案 0 :(得分:3)
如果您只是想换新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
答案 1 :(得分:0)
返回您需要使用的2D数组
double **
要在功能处理()中将2D数组作为参数,您可以使用
double *results[2]
或
double results[2][]
答案 2 :(得分:0)
您的函数的返回值只需要1D array
作为返回值。要使其适用于2D数组,请将其设为double **
。
当您返回时,仅返回results
。不要在其前面加*
。
答案 3 :(得分:0)
我想你想要这个:
double ** process(int n, double ** results)
{
/* Do stuffz */
return results;
}
答案 4 :(得分:0)
您可能希望返回指向二维数组的指针。在这种情况下,您必须使用:
double (*process (int n, double results[][2], ...))[2] {
return results;
}
这基本上意味着“返回指向两个2个元素的指针”
或者,为了使它更具可读性:
typedef double arrayType[2];
arrayType * process(int n, double results[][2]) {
return results;
}