【发布时间】:2020-05-03 19:17:57
【问题描述】:
考虑下面的 C 代码。我原以为变量bar 每次都被实例化,因此会指向内存中的不同地址,但事实并非如此。
for (i = 2; i < 7; i++) {
struct foo bar;
printf("struct %u\n", bar);
}
输出:
struct 13205520
struct 13205520
struct 13205520
struct 13205520
struct 13205520
如果不是很明显,我想要的是在 5 个不同的位置生成 5 个不同的 structs,实际上是 5 个指向 structs 的不同指针。我该怎么做?
【问题讨论】:
-
改用
malloc() -
struct foo bar[5]; -
您显示的代码有未定义的行为。
unsigned int的格式说明符如何能够打印结构对象实例?要打印指针,首先需要一个实际的指针,例如使用地址运算符&(如&bar);其次,您需要使用格式说明符%p来打印void *;第三,你需要将你的指针指向void *。 -
@Paul D 如果每次变量都有不同的地址,那么所有内存都会很快耗尽。:)
-
至于你的“问题”,为什么你认为结构每次迭代都应该获得一个新的位置?既然对象的生命周期随着循环的迭代而结束,为什么不简单地重用现有的内存呢?