while (1)
{
struct entry n =
{
ele[i], NULL, 1
};
printf("%d", &n); // todo the same address
}
这个程序保持打印相同的地址,不是结构条目n = xxx是c ++和java中的“new”操作吗?非常感谢。
答案 0 :(得分:3)
不,它根本不是一样的。在这里,您将创建一个已经分配空间编译时的结构,并且始终具有相同的地址。没有必要创建一个新的。您只需在结构中设置值。
该值在堆栈中分配,因为您处于相同的堆栈帧中,所以它将保持不变。
如果要将代码更改为调用函数,则值将更改。例如
void test1()
{
struct entry n =
{
ele[i], NULL, 1
};
printf("%d", &n);
}
void test2()
{
test1();
}
void main()
{
test1();
test1();
test2();
test1();
test2();
}
从前两个开始,您将(很可能)获得相同的地址,因为调用中的堆栈修改完全相同。但是当你调用test2()
时调用test1()
然后地址不同,因为堆栈帧不同。
但是即使在这种情况下,struct 的地址也不能存储在任何地方,因为它只是一个临时的局部变量,它会在从函数返回后消失,并且取消引用它会调用未定义的行为
答案 1 :(得分:1)
结构条目n = xxx不像" new"在c ++和java?
由于我不熟悉这种语言,因此无法说出任何关于java的内容。
它肯定不像C ++中的new
。
n
是一个自动变量,其地址&n
在每次迭代中都是相同的
while
循环。