考虑下面的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.为什么我在大学(以及在几本书中)告诉我,在C++程序中,运行时增加的内存使用量只能通过使用指针来实现? 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):
公平地说,这不是一个C++程序。 VLA不是C++的一部分。 – krzaq
指针指向的东西。事情如何分配是另一回事。 – juanchopanza
如果我可以问,什么是VLA? –