【发布时间】:2020-02-10 03:02:43
【问题描述】:
有人能解释一下为什么在循环中声明变量时指针会被覆盖吗?
例如,给定以下 sn-p,并且用户输入 1 和 2。我希望 pNums 数组包含 2 个指针,指向分别保存值 1 和 2 的 2 个整数。
但是,控制台会打印出2 和2;
#include <iostream>
using namespace std;
//Input "1 2"
int main() {
int* pNums[2];
for(int i = 0; i < 2; i++){
int num;
cin >> num;
pNums[i] = (&num);
}
cout << (*pNums[0]) << endl;
cout << (*pNums[1]) << endl;
}
为什么会这样?我该如何解决?例如,如果我们不知道用户将输入多少个数字,而不是for 循环,我们有一个while 循环怎么办?在满足某些条件之前,我们要不断创建新指针并将它们存储到pNums 向量中?
【问题讨论】:
-
int 变量实际上只声明了一次 for all for 循环迭代,因此共享相同的内存。您想查看动态变量并使用 new/delete。或者更改为使用另一种方法,例如 std::vector 列表,您可以在其中将数字添加到列表中。
-
为什么要不断创建新的指针?你不想要新的值吗?如果没有新的东西可以指向,那么创建新指针的目的是什么?
标签: c++ for-loop pointers memory-management