首页 > 解决方案 > 如何访问在 main 的另一个函数中创建的数组而不返回它?

问题描述

StackOverflow 上的第一篇文章。我应该创建一个函数:

int sumsort(int *a, int *b, int *c)

此函数应按升序排列 a、b 和 c 指向的内存位置中的 3 个值,并返回内存位置 a、b 和 c 的内容之和。

这是我的功能:

 int sumsort(int *a, int *b, int *c) {

    int sum = *a + *b + *c;

    int sorted[] = {*a, *b, *c};

    for (int i = 0; i <= 2; i++) {

       if (sorted[0] > sorted[1]) 

       {
          int temp = sorted[1];
          sorted[1] = sorted[0];
          sorted[0] = temp;
       } // end if
       if (sorted[1] > sorted[2]) 
       {
          int temp2 = sorted[2];
          sorted[2] = sorted[1];
          sorted[1] = temp2;
       } // end if

    } // end for

    return sum;

} // end sumsort function

如何访问sorted[]main 中的数组?我需要按升序打印 3 个变量,但我真的不知道我该怎么做,因为sumsort函数必须返回总和并且实际排序也必须在sumsort函数中进行。

我尝试在 main 中创建一个新的数组变量并sorted[]在调用该sumsort函数后对其进行分配,但这不起作用,因为它超出了范围?

标签: carrayssortingpointers

解决方案


您是正确的,您无法sortedmain. 但你不需要。该函数的要点在于它修改了其参数所指向的值。

例如:

int main()
{
    int x = 5, y = 1, z = 3;

    int sum = sumsort(&x, &y, &y);

    // now  x == 1  ,  y == 3  , z == 5
}

这个有可能。在里面sumsort你不需要创建一个新数组,而是修改它的参数指向的值。

例如,如果你只需要对两个数字进行排序,这就是你要做的

void foo(int* a, int *b)
{
    if (*a > *b)
    {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
}

推荐阅读