C 返回两个指向动态数组的指针

C 返回两个指向动态数组的指针,c,arrays,pointers,dynamic-arrays,C,Arrays,Pointers,Dynamic Arrays,我在指针和动态数组方面遇到了很多问题。 我有一个我调用的函数,它做了很多事情,比如从动态数组中删除一个元素,这会导致我将内存重新分配到这些动态数组中的一个。问题是我在函数中调用函数,无法将所有值正确返回到Main。 既然我不能返回2个值,我该怎么做 structure1* register(structure1 *registerArray,structure2 *waitingList, int counter){ //Bunch of code in here registe

我在指针和动态数组方面遇到了很多问题。 我有一个我调用的函数,它做了很多事情,比如从动态数组中删除一个元素,这会导致我将内存重新分配到这些动态数组中的一个。问题是我在函数中调用函数,无法将所有值正确返回到Main。 既然我不能返回2个值,我该怎么做

structure1* register(structure1 *registerArray,structure2 *waitingList, int counter){
    //Bunch of code in here
    registerArray = realloc(inspecao, (counter)+1);
    waitingList = eliminate(waitingList, 5, counter); //Doesn't matter what it does really

    return registerArray;
}


structure1* eliminate(structure1 *arrayToEliminateFrom, int positionToEliminate, int *counter){

    //The code for this doesn't matter
    //All I do is eliminate an ellement and reallocate it
    arrayToEliminateFrom = realloc(arrayToEliminateFrom, (*counter-1)*sizeof(structure1))
    return arrayToEliminateFrom;
}
如您所见,我不知道如何将waitingList动态数组的指针返回到Main。我该怎么做? 我到处都找过了。
“帮助”

您应该尝试使用更高的结构,该结构包含指针,并在函数之间传递和返回该结构,因为函数只能返回一个对象/结构,但您的结构/对象可以包含更多的对象/结构

首先,根据您的评论,您认为您的讲师想要什么:

void
xregister(structure1 **registerArray, int *arrayCount,
    structure1 **waitingList, int *waitCount)
{

    // Bunch of code in here

    *arrayCount += 1;
    *registerArray = realloc(inspecao, *arrayCount * sizeof(structure1));

    // Doesn't matter what it does really
    eliminate(waitingList, 5, waitCount)
}

void
eliminate(structure1 **arrayToEliminateFrom, int positionToEliminate,
int *count)
{

    // The code for this doesn't matter

    *count -= 1;

    // All I do is eliminate an ellement and reallocate it
    *arrayToEliminateFrom = realloc(*arrayToEliminateFrom,
        *count * sizeof(structure1))
}
以下是罗伯托和我的建议。实际上,我的方法是一种通用的可变长度数组方法,只需稍微改变字段即可完全通用。在某种程度上,既然你已经在使用结构,我不明白为什么你的导师会反对,因为这是一种标准的方法。不那么麻烦,更干净

struct vector {
    int vec_count;
    structure1 *vec_base;
};

void
xregister(vector *registerArray,vector *waitingList)
{

    // Bunch of code in here

    registerArray->vec_count += 1;
    registerArray->vec_base = realloc(registerArray->vec_base,
        registerArray->vec_count * sizeof(structure1));

    // Doesn't matter what it does really
    eliminate(waitingList, 5)
}

void
eliminate(vector *arrayToEliminateFrom, int positionToEliminate)
{

    // The code for this doesn't matter

    arrayToEliminateFrom->vec_count -= 1;

    // All I do is eliminate an ellement and reallocate it
    arrayToEliminateFrom->vec_base = realloc(arrayToEliminateFrom->vec_base,
        arrayToEliminateFrom->vec_count * sizeof(structure1))
}
这里有一个更简洁的方法:

struct vector {
    int vec_count;
    structure1 *vec_base;
};

void
vecgrow(vector *vec,int inc)
{

    vec->vec_count += inc;
    vec->vec_base = realloc(vec->vec_base,vec->vec_count * sizeof(structure1));
}

void
xregister(vector *registerArray,vector *waitingList)
{

    // Bunch of code in here

    vecgrow(registerArray,1);

    // Doesn't matter what it does really
    eliminate(waitingList, 5)
}

void
eliminate(vector *arrayToEliminateFrom, int positionToEliminate)
{

    // The code for this doesn't matter

    vecgrow(arrayToEliminateFrom,-1);
}

我不知道你在问什么,但是任何“返回n个值”的问题都可以通过传递一个指向n个要写入的变量的指针来解决。这并没有解决问题。我不知道如何使用指向指针的指针。我将为您真正的问题提供一个答案,但是
register
实际上是一个旧的C关键字属性,如
extern
static
。现在没有太多使用,但作为符号仍然是非法的,所以只需将其重命名(例如registerx或xregister或register_array)Craig,我在stackoverflow上写时将函数名改为register。。因为函数的名称是葡萄牙语的,可能会让人困惑,所以您的想法是正确的(我也打算提出同样的建议)。这可能有助于通过重新编码他的资料来充实OP。(例如)使用额外的结构,大多数func现在可以返回void并且[需要]只接受一个参数。这可能并不明显,我要感谢你们所有人的回答。我认为我的老师不希望我这么做。我想通过将动态数组的指针传递给函数,它会自动改变。但它似乎是在复制,而不是改变原件。如何通过引用或指针传递到指针?