如何使用函数返回的数组?用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_number
— main()
函数如何知道数组中有多少个元素?解决这个问题的一种方法是将指针传递给可以保存素数的函数:
int *findprimes(int n, int *num_primes)
并在 returning 之前的函数中使用 *num_primes = total;
。
您可以使用以下方式调用该函数:
int some_magic_number;
int *primes = findprimes(n, &some_magic_number);
您可能会为 main()
中的变量选择一个替代名称,但它说明了我的观点。
我对这个问题的总体目标是了解如何使用(例如,打印)从外部函数返回的数组。我以素数为例。 我是新手,所以要深入解释...如果有不需要的信息或误用的术语,我深表歉意:)
我定义了一个函数“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_number
— main()
函数如何知道数组中有多少个元素?解决这个问题的一种方法是将指针传递给可以保存素数的函数:
int *findprimes(int n, int *num_primes)
并在 returning 之前的函数中使用 *num_primes = total;
。
您可以使用以下方式调用该函数:
int some_magic_number;
int *primes = findprimes(n, &some_magic_number);
您可能会为 main()
中的变量选择一个替代名称,但它说明了我的观点。