gpt4 book ai didi

c++ - 为什么 vector 中的所有指针都指向同一元素?

转载 作者:行者123 更新时间:2023-12-01 15:10:17 25 4
gpt4 key购买 nike

在理解C++中的指针时,似乎有一个基本问题。以我的理解,下面的代码示例应在控制台中输出“53”,但相反,它将输出“33”。

// Example program
#include <iostream>
#include <vector>

int main()
{
std::vector<int*> v;
{
int z = 5;
v.push_back(&z);
}

{
int a = 3;
v.push_back(&a);
}
std::cout << *v[0] << *v[1] << std::endl;
}
我最初在一个当前正在处理的较大项目中遇到了这个问题,并且我意识到如果以这种方式进行操作,那么我之前添加的所有指针都指向与上一个相同的元素。但为什么?我以为如果我添加两个指向不同整数的指针,将它们添加到 vector 后它们将保持不同。

最佳答案

这个:

{
int a = 3;
v.push_back(&a);
}
导致未定义的行为:您正在存储临时地址,并在以后使用。这意味着任何事情都可能发生:该程序可能会显示“对不起David,我不能这样做。”
范围一结束(使用 }), a的生命周期就会结束,并且它曾经占用的地址可以重用。这就是代码中发生的事情,相同的地址被重用,因此您最终将相同的地址存储了两次。但是同样,未定义的行为意味着任何事情都可能发生。例如,如果我在计算机上启用了优化功能的情况下进行编译,则会显示“33”,但是如果我禁用优化功能,则会显示“53”。

关于c++ - 为什么 vector 中的所有指针都指向同一元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63214363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com