Рассмотрим следующую программу на C++:динамическое распределение памяти в C++ без указателей - какая точка указателей?
#include <iostream>
using namespace std;
void printArray(int p_values[], int size, int elements_set);
int main()
{
int next_element = 0;
int size = 3;
int p_values[size];
int val;
cout << "Please enter a number: ";
cin >> val;
while (val > 0)
{
if (size == next_element+1)
{
size *=2;
int p_values[size];
}
p_values[next_element] = val;
next_element++;
cout << "Current array values are: " << endl;
printArray(p_values, size, next_element);
cout << "Please enter a number (or 0 to exit): ";
cin >> val;
}
}
void printArray(int p_values[], int size, int elements_set)
{
cout << "Total size of array: " << size << endl;
cout << "Number of slots set so far: " << elements_set << endl;
cout << "Values in the array: " << endl;
for (int i = 0; i < elements_set; ++i){
cout << "p_values[" << i << "] = "
<< p_values[i] << endl;
}
}
Что делает этот код является просто: 1. пользователю предлагается для ряда 2. число сохраняется в массиве 3. текущее содержание массив распечатывается
После того, как массив заполнен, его размер удваивается. Такое динамическое увеличение массива во время выполнения обычно выполняется с помощью указателя. На самом деле мне сказали, что такое динамическое увеличение размера массива возможно только с помощью указателей.
Однако, как вы можете видеть в программе выше, я не использовал никаких указателей, а только статический массив. Тем не менее, программа динамически увеличивает размер массива во время выполнения.
Поэтому я задаю следующие вопросы: 1. Почему я сказал в университете (а также в нескольких книгах), что в программе на С ++ увеличение использования памяти во время выполнения возможно только с помощью указателей? 2. Какова точка указателей (кроме возможности передавать переменные по ссылке при вызове функции), учитывая, что динамическое распределение памяти может быть выполнено без них?
После запуска программы на некоторое время и вступив 8 номеров, вывод программы выглядит следующим образом:
Please enter a number (or 0 to exit): 8
Current array values are:
Total size of array: 12
Number of slots set so far: 8
Values in the array:
p_values[0] = 1
p_values[1] = 2
p_values[2] = 3
p_values[3] = 4
p_values[4] = 5
p_values[5] = 6
p_values[6] = 7
p_values[7] = 8
Please enter a number (or 0 to exit):
Справедливости ради, это не программа на С ++. VLA не являются частью C++. – krzaq
Указатели предназначены для указания на вещи. Как распределяются вещи - это другое дело. – juanchopanza
Что такое VLA, если я могу спросить? –