Как вернуть массив для использования в других функциях?

У меня такая проблема, что изменяя массив в первых 2-х функциях(т.е. удалив наибольший элемент массива и во второй функции добавив в него элементы, третья функция у меня снова берется от исходного массива, т.е мне нужно чтобы в 3-ю функцию передавался массив полученный после второй функции.

#include <iostream>
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int max(int* arr, int n)
{ int index,i,j,max;
max = arr[0];
index = 0;
for ( i = 0; i < n; i++)
for ( j = 1; j < n; j++)
if(max < arr[j])
{
max = arr[j];
index = j;
}

cout << "Poluchenniy massiv : ";

for ( i = index; i < n - 1; i++)
arr[i] = arr[i+1];

for ( i = 0; i < n - 1; i++)
{
cout<<arr[i]<<" ";
}
cout << endl;
}
//первая функция-здесь всё хорошо
int adel(int* massiv, int c)
{ int k=0,i;
cout<<" Vvedite chislo ellem dla vvoda "<<endl; cin>>k;
int num = c-1 + k;
int *t = new int[num];

for (int i = 0; i < c-1; i++)
{
t[i] = massiv[i];
}
cout<<"Vvedite ellemti massiva"<<endl;
for ( i = c-1; i < num; i++)
{
cin>> t[i];
}
for ( i = 0; i < num; i++)
{
cout << t[i] << " ";
} cout << endl;
}//возможно в этой функции есть ошибка, так как сделал по колхозному, создал массив состоящий из числа элементов равного исходному массиву-1 + сколько мы хотим ввести.

int sikl(int* mas,int r)
{
int m,i,j,p;
cout<<"Na skolko elementov sdvinem massiv?"<<endl; cin>>m;
for (i = 0; i < m; ++i)
{
p = mas[0];
for ( j = 0; j < r - 1; j++)
mas[j] = mas[j+1];
mas[r-1] = p;
}

for ( i = 0; i < r; i++)
cout<<mas[i]<<" ";
cout<<endl;
//Балет начинается здесь, так как функция берется от исходного массива, а полученный в предыдущей функции массив не выводиться.
int main()
{
srand(time(0));
int n,i,j,p;
cout << "Vvedite chislo ellementov " << endl; cin >> n;
int* a = new int[n];

cout << "Ishodniy massiv: ";
for ( i = 0; i < n; i++)
{
a[i] = rand() % 50-25;
cout << a[i] << " ";
}
cout << endl;
cout<<"Udalim maksimalniy ellement"<<endl;
max(a,n);
cout<<"Dobavim ellementi v kones"<<endl;
adel(a,n);
cout<<"Siklicheski sdvinem massiv"<<endl;
sikl(a,n);
system("pause");
}

Буду очень благодарен за помощь!

Сложно читать код без отступов.

Можно либо просто изменять переданный массив во всех, либо добавить еще два параметра (указатель на массив и указатель или ссылка на число) и передавать через них результат (получившийся массив и размер).
Или взять std::vector, его можно нормально возвращать/копировать.

Так а во вторую надо что ли исходный передавать, а не результат первой?