如何更改指针指向不同的对象?

时间:2014-01-12 16:31:49

标签: c pointers

我有一个带有值的集合,我想指定一个指针指向集合中的一个项目。

以下是一个不起作用的类似示例:

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;
}

如何在changeVar函数之后,randomPointer指向newInteger的地址?

PS。 randomPointer必须是指针

2 个答案:

答案 0 :(得分:2)

要使对var的更改传播回调用者,您需要通过指针传递var

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

也就是说,newIntegerchangeVar返回的时刻超出了范围,所以在此之后你不应该继续指向它。取消引用这样的指针将导致undefined behaviour

答案 1 :(得分:1)

您需要将引用(指向指针的指针)传递给您的函数。通过这种方式,您可以告诉功能"更改此位置的值"。

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

注意 - 您需要static,因为一旦您离开该功能,内存位置将无效。现在用

来调用它
changeValue(&randomPointer);