变量更改后,如何保持指针指向的初始值
How to keep the initial value a pointer was pointing after a variable is changed?
我意识到这段代码很傻,但它是我问题的简化版本。下面的代码打印出10个10,我希望它打印出数字0到9,这是当j被添加到向量时j所指向的值。如何将指针存储在向量中,使其指向存储时所指向的原始整数值?
int main()
{
std::vector<int*> test;
int *j;
for (int i = 0; i < 10; i++)
{
j = &i;
test.push_back(j);
}
for (int i = 0; i < 10; i++)
{
std::cout << *test[i] << std::endl;
}
return 0;
}
对于这个简单的示例,指针甚至都不必要!我们可以简单地进行
std::vector<int> test;
for (int i = 0; i < 10; i++)
{
test.push_back(i);
}
然而,如果你坚持像现在这样使用指针。。。您当前有未定义的行为。
循环结束后,i
超出范围,指针指向不再拥有的内存。您想要的东西可以通过使用动态分配的内存来实现。我们可以为向量的每个值分配一个新的整数:
std::vector<int*> test;
int *j;
for (int i = 0; i < 10; i++)
{
j = new int(i);
test.push_back(j);
}
只要记住,你必须在完成后自己释放内存!
for (int i = 0; i < 10; i++)
{
delete test.at(i);
}
我很确定你在找这个
int main()
{
std::vector<int> test;
int *j;
for (int i = 0; i < 10; i++)
{
j = &i;
test.push_back(*j);
}
for (int i = 0; i < 10; i++)
{
std::cout << test[i] << std::endl;
}
return 0;
}
所以。。。。我已经将"test"更改为整数值的矢量,而不是指针,并且在将指针"j"存储在矢量中之前,我已经取消了对它的引用。我已经调整了打印程序以打印值
您可以指向另一个容器的元素:
std::vector<int*> test; // holding pointers
std::array<int, 10> ray; // holding values
std::iota(ray.begin(), ray.end(), 0) // 0, 1, 2, 3..
for (int i = 0; i < 10; i++)
{
int *j = &ray[i];
test.push_back(j);
}
相关文章:
- 在C++中释放内存期间,迭代器与指针有何不同
- 为什么指针在初始化后保持空点
- 变量更改后,如何保持指针指向的初始值
- 智能指针的 std::swap 是否保证引用保持不变?
- 哪种整数类型可以安全且便携式用于始终保持指针值
- 指向成员函数的指针与指向数据成员的指针有何不同
- 如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
- 对齐方式与指针中尾随零的数量有何关系
- 指针类成员在通过类方法初始化后保持 NULL
- 指向自定义类型的静态指针在初始化后使用相同类型的静态非空指针保持 nullptr
- 如何跨指针保持常量正确性
- 删除内存空间后,指针的值保持不变还是更改?对象内容是否将被更改
- 指向类A的指针被传递给类B,但当B被删除时,A也是.如何保持A
- 更改指针指向指针的位置,同时保持其他两个指针的值
- C++03 12.4/12对通过指针显式调用基类析构函数有何说明
- 如何用自定义比较表示一组指针,但保持原始原始指针的重复比较
- 当退出 new/malloc 函数时,从 new/malloc 返回的指针如何保持在范围内
- std::bind 如何以及为什么保持指针处于活动状态
- 指针在返回(保持 null)后不会从函数返回到它的引用C++
- 为什么以及在何处在C++中使用引用和指针