2014-05-08 87 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); 

} 
相關問題