c++ - 如何在更改变量后保持指针指向的初始值?

标签 c++ pointers

我意识到这段代码很愚蠢,但它是我的问题的简化版本。下面的代码打印出 10 个 10,我想要它做的是打印出数字 0 到 9,这是将 j 添加到 vector 时 j 指向的值。如何让存储在 vector 中的指针指向它在存储时指向的原始整数值?

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 超出范围,您的指针指向您不再拥有的内存。你想要的可以通过使用动态分配的内存来完成。我们可以为 vector 的每个值分配一个新的整数:

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);
}

关于c++ - 如何在更改变量后保持指针指向的初始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51619379/

相关文章:

c# - SpicIE 在开发 IE 插件时有哪些限制?

c++ - 从当前时间减去 40 分钟

C++为什么不能重新声明类成员函数而普通函数可以

c++ - 警告 : state has already been added to QState

c++ - C++:如何返回集合的迭代器指向的值?

c++ - 这是某种指针错误吗?

c++ - 变形代码和多态代码有什么区别?

c - scanf 和指针的问题

c - 学习C——指针和内存寻址

arrays - NASM - 如何制作结构指针数组并访问它们