2016-10-01 2 views
-2

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 루프는 로컬 범위가 있습니까? 감사합니다.

+2

이들이 범위보다 오래 살 필요가 없기 때문에. 자동 변수가 무엇인지 아십니까? 그렇지 않은 경우 검색하십시오. – Olaf

답변

1

변수는 코드의 첫 번째 모양 이후와 둘러싸는 블록의 끝까지 정의됩니다. 범위의 끝에 도달하면 원래 메모리를 다른 용도로 사용할 수 있습니다.

특히 루프에서 변수는 항상 컴파일러가 달성 할 수있는 가장 쉬운 것만 큼 같은 위치를 차지합니다.

두 번째 사례는 첫 번째 변수가 정의 된 상태와 완전히 다른 경우입니다. 다음 예제에서 동일한 주소를 얻을 수 있지만 컴파일러 및 디버그 수준, 최적화 등에 따라 달라집니다.

관련 문제