2014-01-12 3 views
0

값이있는 컬렉션이 있고 컬렉션의 항목 중 하나를 가리키는 포인터를 지정하고 싶습니다. 내가 newInteger의 주소로 그래서 그 changeVar 기능 후, randomPointer 점을 어떻게다른 개체를 가리 키도록 포인터를 변경하는 방법?

void changeVar(int * var) { 
     int newInteger = 99; 
     var = &newInteger; 
} 

int main() { 
    // create a random pointer and initialize to NULL 
    int * randomPointer= 0; 

    // the printf prints out it's address as 0. good. 
    printf("address: %d \n\r", randomPointer); 

    // pass the pointer to a function which should change where the pointer points 
    changeVar(randomPointer); 

    // the printf below should print the value of the newInteger and randomPointer should point to newInteger value address 
    printf("value: %d \n\r", *randomPointer); 

return 0; 
} 

을 : 여기

이 작동하지 않습니다 유사한 예이다?

추신. randomPointer

답변

1

함수에 대한 참조 (포인터에 대한 포인터)를 전달해야합니다. 그런 식으로 "이 위치의 값 변경"기능을 말할 수 있습니다.

void changeVar(int **pp){ 
    static int n=99; 
    *p = &n; 
} 

주 - 기능을 종료하면 메모리 위치가 유효하지 않으므로 static이 필요합니다. 이제

changeValue(&randomPointer); 
2

var에 변화가 호출자에게 전파 만들려면, 당신은 포인터 var을 전달해야 포인터를해야합니다 :

말했다
void changeVar(int** var) { 
     (*var) = ...; 
} 

, newInteger 때문에, 범위 순간 changeVar 반환 벗어나 그 이후에 포인터를 유지해서는 안됩니다. 이러한 포인터를 역 참조하면 undefined behaviour이됩니다.

+0

예라고 부릅니다. 나는 나쁜 모범을 보였다. 실제의 경우 객체는 정적이다. –

관련 문제