2014-06-24 2 views
0

나는 C에서 정적 변수 주위에 내 머리를 정리하려고했는데 그래서 나는이 쓴 :C 정적 변수

#include <ctype.h> 
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 

int *pointer; 
void stat(); 

int main() 
{ 
    stat(); 
    printf("%i", *pointer); 
} 

void stat() 
{ 
    int c = 2; 
    pointer = &c; 
} 

이 작업과 명령 줄에서 표시 2,하지만 난 이해하지 않습니다를 왜. function stat가 종료 될 때 int C가 존재하지 않습니까? 그러면 포인터가 가리키는 점은 무엇입니까? 그리고 정수의 값을 어떻게 유지합니까? 왜 여기서 정적으로 만들지 않고 할 수 있습니까?

+3

'c '가 존재하지 않는다고해도, 메모리 공간이'c'에 포함 된 값을 저장하지 않는다는 의미는 아닙니다. 그러나 당신은 이것이 항상 사실이라는 것을 보증 할 수 없습니다. 포인터는 메모리의 해당 공간을 가리 킵니다. – AntonH

답변

1

c은 존재하지 않지만 여전히 메모리 위치를 볼 수 있으며 행운이 있습니다. 가치는 아직 그 순간에 남아 있습니다. 아직 다른 어떤 것에 의해 덮어 쓰지는 않았습니다.

귀하의 이해가 정확합니다. pointer은 한번 보지 말아야 할 메모리를 가리키고 있습니다. stat가 반환됩니다. 객체로서의

1

c가 존재하지 않게된다. 그러나 포인터가 전역이므로 더 이상 존재하지 않습니다. 포인터가 c가있는 메모리 주소를 가리키고 있습니다. 다른 곳으로 향하게하지 않으면 계속 가리킬 것입니다. 하지만 다른 주소가 할당되거나 나중에 메모리에 덮어 쓰게되면 해당 주소의 내용이 변경 될 수 있습니다.

여기에 아무것도 정적이 아닌 것을 추가해야합니다. static 키워드는 특별한 의미가 있으며 키워드가 선언 된 범위에 따라 다른 효과가 있습니다.