如何使用函数返回的数组?用C语言

How to make use of an array returned by a function? in C language

我对这个问题的总体目标是了解如何使用(例如,打印)从外部函数返回的数组。我以素数为例。 我是新手,所以要深入解释...如果有不需要的信息或误用的术语,我深表歉意:)

我定义了一个函数“findprimes”来查找 1 和 x 之间的每个素数。 该函数成功地 打印了 一个素数数组。但是,我不知道它是否 returns 素数数组。而且,如果是这样,我不知道如何在 main() 中使用所述数组。

这是函数'findprimes':

int* findprimes(int x) {

    int i, j, total=0;
    int* numbers = (int*)malloc((x + 1) * sizeof(int));

    /* initialization */
    for (i = 0; i <= x + 1; i++) {
        numbers[i] = 1;
    }

    /* find primes and assign prime=1 */
    for (i = 2; i < sqrt(x); i++) {
        if (numbers[i] == 1) {
            for (j = i * i; j <= x; j = j + 2) {
                if (j % i == 0) {
                    numbers[j] = 0;
                }
            }
        }
    }

    /* count how many primes */
    for (i = 1; i <= x; i++) {
        if (numbers[i] == 1) {
            total++;
        }
    }

    /* put primes into their own array */
    int* primes = (int*)malloc(total * sizeof(int));
    for (i = 1,j=0; i <= x; i++) {
        if (numbers[i] == 1) {
            primes[j] = i;
            j++;
        }
    }

    //I want this part to be in main()
    printf("The prime numbers between 1 and %d are: ", x);
    for (i = 0; i < total; i++) {
        printf("%d ", primes[i]);
    }
    
    return primes;
}

我想在 main 中打印 'primes' 数组,而不是在函数 'findprimes' 本身中打印。我该怎么做?

int main() {

    int n;

    do {
        printf("Enter a value for X>2: ");
        scanf("%d", &n);
    } while (n <= 2);

    findprimes(n); //This returns 'primes' array

    //I want to print 'primes' array here
}

捕获main()中的return值:

int *primes = findprimes(n);

并使用数组:

for (int i = 0; i < some_magic_number; i++)
{
    printf("%d\n", primes[i]);
}

记得释放内存:

free(primes);

其实你还需要在函数中freenumbers

需要知道 some_magic_numbermain() 函数如何知道数组中有多少个元素?解决这个问题的一种方法是将指针传递给可以保存素数的函数:

int *findprimes(int n, int *num_primes)

并在 returning 之前的函数中使用 *num_primes = total;。 您可以使用以下方式调用该函数:

int some_magic_number;
int *primes = findprimes(n, &some_magic_number);

您可能会为 main() 中的变量选择一个替代名称,但它说明了我的观点。