C ++ char *作为类成员

时间:2017-01-01 14:34:50

标签: c++ pointers char

我想知道为什么下面的代码是这样的:我在一个类中有char*个成员字段。当我创建此类的一个对象然后创建第二个对象,然后将第二个对象分配给第一个对象时,第一个对象中char*类成员的更改应该影响第二个对象的更改。为什么值不同?

class A{
public:
    char* word;
    int* number;
    A(){
        word = new char[100];
        number = new int;
    }
};


int main()
{
    char* a = "lala";
    char* b = "baba";

    A a1;
    a1.word = a;
    *(a1.number) = 23;
    A a2;
    a2 = a1; //After that pointers should point to the same address, because a2.word = a1.word

    a2.word = b;
    *(a2.number) = 10;

    cout << a1.word << endl << a2.word << endl;
    cout << *(a1.number) << endl << *(a2.number) << endl;


    return 0;
}

指针理论表明结果应该是:

Sample2
Sample2
10
10

但结果是:

Sample1
Sample2
10
10

对于作为班级成员的int*,行为就像理论所暗示的那样。

4 个答案:

答案 0 :(得分:3)

首次分配a2 = a1时,两个指针都指向同一个字符串(sample1)

但是在执行a2.word = sample2之后,您正在更改其中一个指针,但不会更改其他指针。

如果复制字符串而不是指定指针,则会得到预期的结果:

std::strcpy(a2.word, sample2);

这也会改变sample1,因为那是a1.worda2.word指向的地方。所以它相当于

std::strcpy(sample1, sample2);

答案 1 :(得分:1)

您没有更改指向的值。你正在改变指针。

答案 2 :(得分:1)

您的两个实例a1a2未被指针引用。 因此,a2 = a1;会创建a1的副本,并将其分配给a2 - &gt;它们不是指同一个对象。

因此,当您执行a2.word = sample2;时,更改word对象中a2的指针,如前所述与a1不同1}}对象

答案 3 :(得分:1)

一步一步:

A a1;
a1.word = sample1;

a1.word现在指向sample1

A a2;
a2 = a1; //After that pointers should point to the same address, because a2.word = a1.word

您的评论是正确的,a2.word现在指向sample1

a2.word = sample2;

现在a2.word指向sample2。上述分配不会将sample2复制到sample1上,而是a2.word指向sample2