c++ - 通过指针后结果的变化

标签 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

最佳答案

I though passing by pointer really shouldn't have any effect after the function is called since it produce a local copy of the pointer in the function.

是的,指针参数本身是按值传递的,指针参数本身的任何修改都与实参无关。这就是第一个代码示例的值没有改变的原因。

但第二种情况不同;您正在修改指针指向的对象。参数和参数指针都指向同一个对象,该对象会发生变化。

关于c++ - 通过指针后结果的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57576936/

相关文章:

C++ 打印指针不确认 showbase

c++ - 如何将外部 DLL 限制为一个 CPU?

c++ - 如何在两个类型定义 vector 上使用指针进行访问

c - C中的动态列表头疼,反向打印列表?为什么?

c - 段错误 : Pointer to an array of string

c - C 中的指针和 char[]

c++ - 使用ifstream时OpenGL版本太低

C++ 使用 "new"创建静态类数组或创建动态数组的另一种方法

c - 在c中打印字符串指针

c++ - 使用use_future的Boost Asio async_send_to多播不起作用