我正在尝试在 C 中创建一堆结构变量。 假设我有一个 for 循环,它运行 3 次并创建三个结构变量。 我的问题是,为什么它要创建引用同一内存位置的变量。 代码:
struct arrIndexStruct {
int *arr;
int index;
};
int main() {
int i;
for (i=0; i<3; i++) {
struct arrIndexStruct arrayIndexStruct;
arrayIndexStruct.arr = someArray;
arrayIndexStruct.index = i;
printf("%p\n",(void *)&arrayIndexStruct);
}
}
我得到的输出是:
0x7ffeed84f690
0x7ffeed84f690
0x7ffeed84f690
如果我这样做
struct arrIndexStruct arrayIndexStruct1;
struct arrIndexStruct arrayIndexStruct2;
printf("%p\n",(void *)&arrayIndexStruct1);
printf("%p\n",(void *)&arrayIndexStruct2);
我会得到
0x7ffc484e64d0
0x7ffc484e64e0
这两种行为有什么区别,for 循环不应该具有局部作用域吗? 谢谢!
最佳答案
该变量仅在代码中首次出现后定义,直到其封闭 block 结束为止。当它到达作用域末尾时,其原始内存可以用于其他用途。
特别是在循环中,变量始终占据相同的位置,因为这是编译器可以实现的最简单的事情。
第二种情况完全不同,因为第一个变量在引入第二个变量时保持定义。您可以在以下示例中获得相同的地址,但这取决于编译器以及调试级别、优化等:
{
struct arrIndexStruct arrayIndexStruct1;
}
{
struct arrIndexStruct arrayIndexStruct2;
}
关于在c中的循环中创建结构体变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802127/