2012-12-04 2 views
1

이 메서드 함수에서 지역 변수의 주요 방법의 값을 출력하는 방법에 대한 내 교사에서 내 친구의 질문이다 (밀어 스택에서 팝업이 끝나면 메모리에 로컬 변수 저장 공간이 다시 있습니다.글로벌 포인터가

왜 주 방법이 100을 인쇄합니까? 주요 방법은 100

1. 지역 변수는 메모리 공간을 할당 인쇄되는 이유

// Define a global pointer 
int *ptr; 

int method() 
{ 
    // Define a variable local in this method 
    int local = 100; 

    // Set address of local variable (name of variable is local) 
    // in the ptr pointer 
    ptr = &local; 

    return -1; 
} 

int main() 
{ 
    // Call method 
    method(); 

    // Print value of ptr pointer 
    cout<<*ptr<<"\n"; 

    return -1; 
} 

답변

1

당신이 요청하는 경우. (따라서 X.에서 말하는 [X] => 100)을 X. 시점에 할당 된 전역

2. 포인터 (예를 들어 포인터 공간 Y. [Y] => X)

3. 포인터의 포인트는 X입니다.

4. 이제 포인터의 값을 인쇄하도록 선택합니다. 즉, [[y]] = [x]는 100입니다.

가비지 값을 인쇄하지 않는 이유는 메모리 공간이 더 이상 로컬에 할당되지 않아도 여전히 그 값을 포함하고 있기 때문입니다.

당신은 내가이 아이디어는 OS에 특정한 생각 메모리의 포인트는 다른 변수

+0

덮어되었을 수 있습니다 좀 더 많은 코드를 작성합니다. 나는 유닉스에서이 동작을 보았다. –

+0

그렇게 생각하지 마십시오. 창에서이 동작을 보았고 그저 일반적인 C 개념 만 알고있었습니다. – cjds

관련 문제