#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的引用
有人可以解释这种行为吗
答案 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;
}
}