Почему не меняется адрес указателя на массив после работы функции(С++)

Подскажите почему массив arr в main функции не изменяет свой адрес (в некоторых случая при arrParam = new T[size + 1] адрес может совпасть со старым адресом массива) после выполнения функции addItemArray()?

Я нашел ответ на вопрос, но я не понимаю его. Необходимо передавать массив по ссылке. void addItemArray(T value, int indexPosition, T* &arrParam, int size)

Но почему код:

delete[] arrParam;

arrParam = new T[size + 1];

Не меняет адрес на новый массив?

#include <iostream>
#include <string>

#include "ConsoleApplication1.h"
using namespace std;

template <typename T>
void addItemArray(T value, int indexPosition, T* arrParam, int size)
{
    T* arrResult = new T[size + 1];

    int indexPlus = 0;
    for (int i = 0; i < size + 1; i++)
    {
        if (i == indexPosition)
        {
            arrResult[i] = value;
            indexPlus--;
        }
        else
        {
            arrResult[i] = arrParam[i + indexPlus];
        }
    }

    delete[] arrParam;
    arrParam = new T[size + 1];

    for (int i = 0; i < size + 1; i++)
    {
        arrParam[i] = arrResult[i];
    }

    delete[] arrResult;
    arrResult = nullptr;

    cout << "-----------------------------" << endl;
    cout << "In function arr" << endl;
    cout << arrParam << endl;
}

int main()
{
    cout << "Enter size array:" << endl;

    int SIZE;
    cin >> SIZE;

    double* arr = new double[SIZE];

    cout << arr << endl;

    for (int i = 0; i < SIZE; i++)
    {
        arr[i] = i;
    }

    addItemArray(55.3, 4, arr, SIZE);

    cout << "-----------------------------" << endl;
    cout << "Outside function arr" << endl;
    cout << arr << endl;

    return 0;
}

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

Автор решения: seg_pro

Окончательный кода получился таким:

#include <iostream>
#include <string>

#include "ConsoleApplication1.h"
using namespace std;

template <typename T>
void addItemArray(T value, int indexPosition, T* arr, int size)
{
    T* arrResult = new T[size + 1];

    int indexPlus = 0;
    for (int i = 0; i < size + 1; i++)
    {
        if (i == indexPosition - 1)
        {
            arrResult[i] = value;
            indexPlus--;
        }
        else
        {
            arrResult[i] = *(arr + i + indexPlus);
        }
    }

    delete[] arr;
    arr = new T[size + 1];

    for (int i = 0; i < size + 1; i++)
    {
       arr[i] = arrResult[i];
    }

    delete[] arrResult;
    arrResult = nullptr;

    cout << "-----------------------------" << endl;
    cout << "In function arr" << endl;
    cout << arr << endl;
}

int main()
{
    cout << "enter size array:" << endl;

    int size;
    cin >> size;

    double* arr = new double[size];

    cout << arr << endl;

    for (int i = 0; i < size; i++)
    {
        arr[i] = i;
    }

    addItemArray(55.3, 4, arr, size);

    cout << "-----------------------------" << endl;
    cout << "outside function arr" << endl;
    cout << arr << endl;

    return 0;
}
→ Ссылка