更改指针指向指向的位置,同时保持其他两个指针的值

时间:2015-03-09 22:56:58

标签: c++ c pointers

所以,我一直在努力学习C ++,在我正在阅读的教程书中,我已经陷入了指针指针的问题。我想要做的是更改指针指向指针的指针,而不更改原始指针的值。这是一些代码......

#include <iostream>
void testFunc(int **func_p_to_p) {
    int *createdPointer = new int(10);
    *func_p_to_p = createdPointer;
    cout << **func_p_to_p << endl; //prints 10 as I expect
}
int main() {
    int **main_p_to_p = NULL;
    int *mainPointer = new int(5);
    main_p_to_p = &mainPointer;
    testFunc(main_p_to_p);
    cout << **test << endl;//prints 10, I expect this...
    cout << *mainPointer << endl; //prints 10 as well, I don't want that.
}

我之前问了一个类似的问题here,我理解发生了什么。但是,我似乎无法弄清楚如何在不改变原始值的情况下改变指向指针的位置。谁能解释我会怎么做?感谢。

2 个答案:

答案 0 :(得分:1)

在第

*func_p_to_p = createdPointer;

首先按照指向指针的指针指向:int *mainPointer的地址。

接下来,为此指针指定一个新值,createdPointer的值,即new int(10)的地址。

因此,您的mainPointer现在更改为与createdPointer相同的内存。这对你有意义吗?

答案 1 :(得分:0)

你不能这样做。 main_p_to_p指向mainPointer,因此修改*main_p_to_p会修改mainPointer,完全停止。

你可能正在寻找这个:

int main() {
    int **main_p_to_p = NULL;
    int *mainPointer = new int(5);
    int *secondPointer = mainPointer;

    main_p_to_p = &secondPointer;

    // prints 5 5 5
    cout << *mainPointer << " " << *secondPointer << " " << **main_p_to_p << std::endl;

    testFunc(main_p_to_p);

    // prints 5 10 10
    cout << *mainPointer << " " << *secondPointer << " " << **main_p_to_p << std::endl;
}

请注意,您不需要main_p_to_p变量,但我将其保留为与问题保持一致。