2012-05-03 2 views
0

이것은 내가 궁금해 한 것입니다. 자, 여기에 함수에 변수를 선언한다고 가정 해 봅시다.이 변수를 다른 함수의 포인터로 전달한다고 가정 해보십시오. 첫 번째 함수 (변수가 선언 된 곳)가 종료되면이 변수는 어떻게됩니까? 함수가 끝나면 스택에 남아 있습니까? 아니면 함수가 제거됩니까? 미리함수에서 포인터 보내기

감사 = D

+2

그것은 저장에 따라 달라 C.가 여기에 포인터에 저장 클래스를 확인 변수에 대한 지정자. – Mahesh

답변

4

변수가 정적이라고 선언하지 않으면 변수를 정의하는 함수가 반환 할 때 변수가 파괴됩니다 (). 당신은 스택에이 변수를 선언하면 http://aelinik.free.fr/c/ch14.htm

+0

링크를 제공해 주셔서 감사합니다. – Davey

1

제 함수는 변수 그에 포인터가 유효하게 파괴되고 종료한다.

+0

답변 해 주셔서 감사합니다.) – Davey

1

그것이 사라지는 것 :

void foo() 
{ 
    int varInStack; 
    foo2(&varInStack); 

    // when foo returns, you loosed your variable. 
} 

당신이 그것을 반환 할 수 있습니다

int foo() 
{ 
    int varInStack; 
    foo2(&varInStack); 

    return varInStack; 
} 
+0

그런데 그것을 되 돌리지 않으면 포인터가 매달리지 않습니다. 함수가 반환되면 로컬 변수에 대한 포인터는 모두 유효하지 않습니다. – cHao

+0

다른 답변입니다. 따라서 로컬 범위에서 포인터를 반환하면 포인터가 사라집니다. – Davey

+0

@Davey : 아니요. * 포인터 *가 여전히 존재합니다. FSM-knows를 가리키면 - 변수 *가 파괴 된 곳입니다. – cHao

관련 문제