2014-05-08 86 views
0

是否有人可以为C函数提供一个模板来接收FLOAT8 []值并返回INT []值?Postgresql C函数需要一个FLOAT8 []并返回一个INT []?

我发现的例子使用与输出数字类型相同的输入数字类型。

我还没有看到任何示例显示如何创建一个新的INT []并将其返回。

+0

请编辑你的问题和答案:'INT []',你真的是'int []'吗?你能定义'FLOAT8'的含义吗? –

+0

请注意,内置的转换函数已经做到了这一点:'select('{1.0,2.1,3.0}':: float []):: int []' –

+0

可能的重复[从Postgres C函数返回一个数组?](http://stackoverflow.com/questions/23557980/return-an-array-from-a-postgres-c-function) –

回答

0

一种方式:

INT *my_function1(FLOAT8 *float8) 
    { 
    INT *zzz = malloc(sizeof(INT) * 10); 

    zzz[0] = 123; 
    zzz[1] = 234; 
    ... 

    return(zzz); 
    } 

呼叫以上这样的:

{ 
INT *aaa = NULL; 
FLOAT8 bbb[10]; 

... 


aaa = my_function1(bbb); 
printf("%d, %d\n", aaa[0], aaa[1]); /* Output: "123, 234" 

... 

if(aaa) 
    free(aaa); 

} 


另一种方法:

void my_function2(FLOAT8 *IN_float8, INT **OUT_int) 
    { 
    INT *yyy=malloc(sizeof(INT) * 10); 

    zzz[0] = 123; 
    zzz[1] = 234; 
    ... 

    if(OUT_int) 
     *OUT_int = yyy; 
    else 
     { 
     free(yyy); 
     fprintf(stderr, "Oops! You gave me a NULL pointer for OUT_int.\n"); 
     } 

    return; 
    } 

呼叫以上这样的:

{ 
INT *aaa = NULL; 
FLOAT8 bbb[10]; 

... 


my_function1(bbb, &aaa); 
printf("%d, %d\n", aaa[0], aaa[1]); /* Output: "123, 234" 

... 

if(aaa) 
    free(aaa); 

} 
相关问题