【问题标题】:Create structure variables in a loop in c在c中的循环中创建结构变量
【发布时间】:2017-02-09 15:47:36
【问题描述】:

我正在尝试在 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循环不应该有本地范围吗? 谢谢!

【问题讨论】:

  • 因为他们没有必要活得比他们的范围更长。你知道什么是自动变量吗?如果没有,请搜索它。

标签: c for-loop struct scope reference


【解决方案1】:

该变量仅在第一次出现在代码中之后才定义,直到其封闭块结束。当它到达作用域的末尾时,它的原始内存可以被其他任何东西使用。

特别是在循环中,变量总是占据相同的位置,因为这是编译器可以实现的最简单的事情。

第二种情况完全不同,因为第一个变量在引入第二个变量时保持定义。您可以在以下示例中获得相同的地址,但这取决于编译器以及调试级别、优化等:

{
    struct arrIndexStruct arrayIndexStruct1;
}
{
    struct arrIndexStruct arrayIndexStruct2;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多