Как я могу получить доступ к массиву, созданному в другой функции в main, не возвращая его? - PullRequest
0 голосов
/ 01 марта 2019

Первый пост в 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

Как я могу получить доступ к массиву sorted[] в main?Мне нужно вывести 3 переменные в порядке возрастания, но я не вижу, как я могу это сделать, поскольку функция sumsort должна возвращать сумму, а фактическая сортировка должна выполняться и в функции sumsort.

Я попытался создать новую переменную массива в main и присвоить ей sorted[] после того, как я вызвал функцию sumsort, но это не сработало, потому что это выходит за рамки?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы можете объявить 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

Возможно, вам придетсяпроверьте логику сортировки.

Надеюсь, это поможет:)

0 голосов
/ 01 марта 2019

Вы правы, что не можете получить доступ к переменной 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...