gpt4 book ai didi

c - 返回数组的函数

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:07 25 4
gpt4 key购买 nike

我需要我的函数返回一个数组,然后该数组将进入下一个函数。根据一些研究,我知道我必须使用指针来完成这项工作。但是,当我运行此代码时,我会在结果中获得内存地址或在我看来内存地址(如果它不是一个巨大的地址)。

问题发生在数组需要改变函数的时候。这两个单独的功能按预期自行运行良好。

这是我的代码:

int main(void) 
{
int y = 0, x[10];
int *p;
y = capturingNumberTimesLoopRuns();
p = PopulateArray(y);
searchArray(x);
}

int capturingNumberTimesLoopRuns (void)
{
int y = 0;
while (y == 0)
{
printf("Please enter the quantity of numbers you wish to enter.\n");
printf("Enter a number between 1 and 10: ");
scanf("%d", &y);
if (y < 1 || y > 10)
{
printf("Invalid Selection! Please Try Again.\n");
y = 0;
}
}
return y;
}

int * PopulateArray(int y)
{
int i;
int x[10];
int a = 1;
for (i = 0; i < y; i++)
{
printf("Please enter number %d: ", a);
scanf("%d", &x[i]);
a++;
}
return x;
}

void searchArray(int x[])
{
int i, a = 0, numberOfTimes = 0, average = 0;
for (i = 0; x[i] != 0; i++)
{
if (x[i] % 3 == 0)
{
a += x[i];
numberOfTimes += 1;
}
}
average = a / numberOfTimes;
printf("%d\n", a);
printf("average = %d", average);
}

最佳答案

您的研究是正确的。在函数内处理数组操作的方法是将指向数组的指针传递给函数。然后,您可以在函数中随意操作数组,而无需在函数返回时返回指针。 (当然,为了方便起见,您仍然可以返回指向数组的指针)

除了将指针传递给数组外,您还需要传递数组的大小(或使用全局变量来跟踪数组的大小——这不是可取的,因为除非完全必要,否则您希望避免使用全局变量).例如,您的 populatearray 函数可以编写如下:

/* pass pointer to array and size to function */
int *populatearray (int *x, int sz)
{
int i, a = 1;

for (i = 0; i < sz; i++) {
printf ("Please enter number %2d: ", a++);
scanf ("%d", &x[i]);
}

return x;
}

(这里的返回是为了方便而不是必需的,因为你的数组是在 main() 中声明的)

这使您可以避免动态分配,维护指向已分配内存块的指针以及在不再需要时释放该内存的责任。动态分配内存没有错,但它是新的 C 程序员必须处理的额外复杂层。

使用您的 populatearray 的简短示例可以按如下方式工作:

#include <stdio.h>

enum { MAXI = 10 }; /* avoid 'magic' numbers, use proper constants */

int *populatearray (int *x, int y);
void prnarray (int *x, int sz);

int main (void) {

int x[MAXI] = {0};

populatearray (x, MAXI);
prnarray (x, MAXI);

return 0;
}

/* pass pointer to array and size to function */
int *populatearray (int *x, int sz)
{
int i, a = 1;

for (i = 0; i < sz; i++) {
printf ("Please enter number %2d: ", a++);
scanf ("%d", &x[i]);
}

return x;
}

/* pass pointer to array and size to function */
void prnarray (int *x, int sz)
{
int i;
for (i = 0; i < sz; i++)
printf (" x[%2d] : %d\n", i, x[i]);
}

示例使用/输出

$ ./bin/array_pass
Please enter number 1: 10
Please enter number 2: 20
Please enter number 3: 30
Please enter number 4: 40
Please enter number 5: 50
Please enter number 6: 60
Please enter number 7: 70
Please enter number 8: 80
Please enter number 9: 90
Please enter number 10: 100
x[ 0] : 10
x[ 1] : 20
x[ 2] : 30
x[ 3] : 40
x[ 4] : 50
x[ 5] : 60
x[ 6] : 70
x[ 7] : 80
x[ 8] : 90
x[ 9] : 100

(虽然不是错误,但 C 的标准编码风格避免了 caMelCase 变量,转而使用所有小写。参见例如 NASA - C Style Guide, 1994)

如果您有任何其他问题,请告诉我。

关于c - 返回数组的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36756256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com