C ++在For循环中为Struct返回相同的引用

时间:2019-02-12 07:40:26

标签: c++

#include <iostream>

struct Demo
{
    int a;
    int b;
};

int main()
{

    for(int i=0;i < 3; i++)
    {
        Demo d;
        d.a = i;
        std::cout  << "Reference of Demo " << &d << std::endl;
    }

    for(int i=0;i < 3; i++)
    {
        Demo d = {i};
        std::cout  << "Reference of Demo " << &d << std::endl;

    }
}

当我执行上述程序时,在输出中获得相同的参考

演示0x6dfef0的引用

演示0x6dfef0的引用

演示0x6dfef0的引用

演示0x6dfee8的引用

演示0x6dfee8的引用

演示0x6dfee8的引用

有人可以解释这种行为吗

1 个答案:

答案 0 :(得分:1)

您在第一个循环中创建一个Demo。保留范围时,将对其进行解构。在第二个循环中,您将在另一个位置创建一个新的Demo

如果在循环之前创建Demo,则将获得两个循环中显示的相同的内存地址。

#include <iostream>

struct Demo
{
    int a;
    int b;
};

int main()
{
    Demo d;
    for(int i=0;i < 3; i++)
    {
        d.a = i;
        std::cout  << "Reference of Demo " << &d << std::endl;
    }

    for(int i=0;i < 3; i++)
    {
        std::cout  << "Reference of Demo " << &d << std::endl;

    }
}