簡體   English   中英

在 c 中的循環中創建結構變量

[英]Create structure variables in a loop in c

我正在嘗試在 C 中創建一堆結構變量。所以假設我有一個運行 3 次並創建三個結構變量的 for 循環。 我的問題是,為什么要創建引用相同內存位置的變量。 代碼:

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 循環不應該具有局部作用域? 謝謝!

變量只在代碼中第一次出現后定義,直到它的封閉塊結束。 當它到達范圍結束時,它的原始內存可以用於其他任何東西。

特別是在循環中,變量總是占據相同的位置,因為這是編譯器可以實現的最簡單的事情。

第二種情況完全不同,因為第一個變量保持定義,而第二個變量被引入。 您可以在以下示例中獲得相同的地址,但這取決於編譯器以及調試級別、優化等:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM