从c#中的函数返回数组和变量

c90pui9n  于 2023-06-21  发布在  C#
关注(0)|答案(3)|浏览(204)

我有一个类似这样的代码:

void func1(){
// some processing
 rle(); 
 // some processing
rle();
}

int rle( , ){

 float fioutPutt[100]; 
 int fioutSize[100];
 // some processing and then save the result in fioutPutt[] and fioutSize[]
}

如何在func1()中接收这些数组?

rta7y2nd

rta7y2nd1#

如果你真的想返回这些值,你需要将它们打包到一个struct中。只能返回单个对象或指向动态分配数组的指针。
在您的情况下,我建议传递一个指向putt/size对数组中第一个元素的指针沿着数组的大小。然后,rle函数可以填充数组,当rle返回时,这些值将可用于func1
示例:

#include <stddef.h>

// define a putt/size pair:
typedef struct PuttSize PuttSize;
struct PuttSize {
    float putt;
    int size;
};

// take a PuttSize* and the number of elements in the array:
void rle(PuttSize psd[], size_t size) {
    // some processing and then save the result in psd
    for(size_t i = 0; i < size; ++i) {
        psd[i].putt = ...;
        psd[i].size = ...;
    }
}

void func1(void) {
    PuttSize psd[100]; // define the array

    // some processing
    rle(psd, sizeof psd / sizeof *psd); // .. and pass it in along with the size
    // some processing
    rle(psd, sizeof psd / sizeof *psd);
}
bjg7j2ky

bjg7j2ky2#

有多种方法可以从函数中调用的数组中获取数据。一个简单的方法是将它们作为参数传递给函数本身:

void func1(){
// some processing
 float fioutPutt[100]; 
 int fioutSize[100];
 rle(fioutPutt, fioutSize); 
 // some processing
 rle(fioutPutt, fioutSize);
}

int rle(float fioutPutt[] , int fioutSize[]){

 //Operations that use fioutPutt[] and fioutSize[]
 // some processing and then save the result in fioutPutt[] and fioutSize[]
}
31moq8wy

31moq8wy3#

您可以通过以下方式修改func1签名:

void func1(float *array1, int *array2);

所以你可以在rle函数中写:

func1(fioutPutt, fioutSize);

注意,您将在func1中接收的数组只是在rle中处理的数组的副本。
正如你所看到的,你所要求的是可能的,但你可以更好地理解,也许你正在努力做一件无用的事情。我建议你尝试改变你的算法的行为。

相关问题