我需要我的函数返回一个数组,然后进入下一个函数。我知道根据一些研究,我必须用一个指针来完成这项工作。然而,当我运行这段代码时,我得到了内存地址,或者在我看来是内存地址(如果不是这个地址的话,那是一个很大的数字)在我的结果中。
当数组需要更改函数时会出现问题。这两个单独的函数按预期在那里运行良好。
这是我的代码:

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
如果你还有其他问题,请告诉我。