我正在用cbook学习c ++。 我的指针有很多问题......
int i;
cin >> i;
const int *quantity = &i;
int array[*quantity];
这是对的吗?我可以在程序运行期间控制数组的大小吗?
答案 0 :(得分:1)
这几乎是正确的,除了在编译时必须知道数组的大小(你在这里试图在堆栈上分配),所以不,你不能这样做这样做。
但是,你可以使用new[]
在运行时分配一个数组,这样你就可以传入一个不是编译时常量的大小(new
在堆上分配):
int* array = new int[*quantity];
// ...
delete[] array; // Manual allocations with `new` require manual deallocations
请注意,在您的特定代码示例中,根本不需要使用指针 - 您可以直接使用i
:
int* array = new int[i];
答案 1 :(得分:0)
不,这是不正确的。数组大小必须是常量表达式,这意味着它可以在编译期间进行评估,而对于您的代码则不是这样。
如果您想要不同大小的数组,可以使用动态分配:
int* array = new int[i];
或者更好地使用std::vector
:
std::vector<int> array(i);
答案 2 :(得分:0)
数组在内存中是固定大小的。因为数组也代表内存中对象的连续块,根据定义,相同的数组不能改变内存中的大小,因为它需要移动甚至可能不属于同一应用程序的内存。
有很多方法可以移动你的数组,然而,当它被填满时将它复制到一个有更多空间的新数组,并且有更多可变类型,例如std::Vector
,但是这里定义的数组不能改变大小。
此代码将改为做什么
i
quantity
i
中放置一个值
quantity
请注意,指针是地址,具体是说给定变量的RAM中的字节地址(例如,尝试直接打印指针!)。 *
和&
运营商会快速说出“#34;在地址获得价值&#34;和&#34;获取&#34;