Массив как возвращаемое значение функции

Мне нужно создать функцию, которая возвращает массив, но при этом не пользоваться динамической памятью и глобальными переменными. Например: функция принимает массив как параметр, переписывает из него все отрицательные числа в новый массив и возвращает указатель на этот массив.

int* NewLine(int* sr, int* nr)
{
    int nr[20]; // выделяем память на новый массив
    int* p = nr;
    ...
    return nr;
}
  • Первый параметр - массив, в котором будем искать отрицательные числа.
  • Второй - адрес, по которому в масив записываем найденые елементы.

Но какие фактические параметры мне нужно передавать при вызове функции? Первый - собственно сам анализируемый массив, а какой второй?


Ответы (1 шт):

Автор решения: Igor
int NewLine(int* sr, int srCount, int* nr) {
  int i, nrCount = 0;
  // walk sr and write negative elements to nr, keeping count
  for (i = 0; i < srCount; i++) {
    if (sr[i] < 0)
      nr[nrCount++] = sr[i];
  }
  return nrCount;
}

int countAll, countNeg;
int all[100], neg[100];
// input/assign countAll and corresponding number of all[] elements
// ...
countNeg = NewLine(all, countAll, neg);

или

int* NewLine(int* sr, int srCount, int* nr, int* nrCount) {
  int i;
  *nrCount = 0;
  // walk sr and write negative elements to nr, keeping count
  for (i = 0; i < srCount; i++) {
    if (sr[i] < 0)
      nr[*nrCount] = sr[i];
    *nrCount = *nrCount + 1;
  }
  return nr;
}

int countAll, countNeg;
int all[100], neg[100];
// input/assign countAll and corresponding number of all[] elements
// ...
NewLine(all, countAll, neg, &countNeg);
→ Ссылка