Почему не меняется адрес указателя на массив после работы функции(С++)
Подскажите почему массив 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;
}