我如何才能访问main中另一个函数中创建的数组而不返回它?

时间:2019-03-01 05:48:48

标签: c arrays sorting pointers

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

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

此函数应在指向的存储位置中排列3个值 以a,b和c的升序排列,并且还返回 内存位置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

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

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

2 个答案:

答案 0 :(得分:1)

您正确的说,您无法从sorted访问main变量。但是您不需要。该函数的要点是它会修改其参数所指向的值。

例如:

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;
    }
}

答案 1 :(得分:0)

您可以将sorted []声明为main之外的全局变量:

int sorted[3];
main()
{
  int a=20, b=15, c=22, sum;
 sum= sumsort(&a,&b,&c);
 printf("%d",sum);
 printf("%d", sorted[0]);
 printf("%d", sorted[1]);
 printf("%d", sorted[2]);

 }

在您的函数中,您可以按如下所示使用它:

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

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

 sorted[0] = *a; 
 sorted[1] = *b;
 sorted[2] = *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

您可能必须检查排序逻辑。

希望这会有所帮助:)