指针通过后结果的变化

Wil*_*iam 2 c++ pointers

我对以下两种情况感到困惑。这两个函数都是通过指针传递的。一个导致主电源的改变,而另一个则没有。我认为在调用函数后,通过指针传递确实不起作用,因为它会在函数中产生指针的本地副本。任何提示表示赞赏

#include <vector>
#include <iostream>
using namespace std;
//
class A
{
        public:
                int b;
                A() {;}
};

//
void  test1(A *a)
{
    A t;
    t.b = 200;
    a = &t;
}

//
void  test2(A *a)
{
    a->b = 200;
}

//
int main()
{
    A a;
    a.b = 10;

    test1(&a);
    cout<<"a.b value is NOT changed"<<endl;
    cout<<a.b<<endl;

    test2(&a);
    cout<<"a.b value is changed"<<endl;
    cout<<a.b<<endl;
}


//.. the output is: 
//a.b value is NOT changed
//10
//a.b value is changed
//200
Run Code Online (Sandbox Code Playgroud)

son*_*yao 6

我虽然通过指针传递实际上在调用函数后实际上没有任何作用,因为它在函数中产生了指针的本地副本。

是的,指针参数本身是通过值传递的,指针参数本身的任何修改都与参数无关。这就是为什么第一个代码示例的值不变的原因。

但这与第二种情况有所不同。您正在修改指针指向的对象。参数和参数指针都指向相同的对象,该对象被更改。