【问题标题】:how to duplicate pointer in order to point on the same object如何复制指针以指向同一个对象
【发布时间】:2012-07-09 11:20:51
【问题描述】:

我是所有 C 编程的新手,我有一个问题,

例如,如果我有一个结构,并且我正在指向它,我想创建一个新指针以指向相同的数据,而不是让两个指针指向同一个对象。 如果不复制结构中的每个字段,我怎么能做到这一点?

typedef struct
{
 int x;
 int y;
 int z;
}mySTRUCT;

mySTRUCT *a;
mySTRUCT *b;
a->x = 1;
a->y = 2;
a->z = 3;

现在我想让 b 指向相同的数据

b = *a 

不正确,编译器在骂我

任何帮助都会很棒!谢谢你:)

【问题讨论】:

    标签: c pointers struct duplicates


    【解决方案1】:

    首先,您的代码不正确。你创建了一个名为a指针,但你没有创建任何东西让它指向。在它指向某个东西之前,你不能取消引用它(使用a->x)。

    一旦你确实有一些结构供你的指针指向,那么你可以通过赋值来复制它们:

    myStruct a_referand = {0};
    myStruct b_referand = {0};
    myStruct *a = &a_referand;
    myStruct *b = &b_referand;
    
    a->x = 1;
    *b = *a; // copy the values of all members of a_referand to b_referand
    // now b->x is 1
    b->x = 2;
    // now b->x is 2 but a->x is still 1
    

    【讨论】:

    • 为什么是 *b = *a 而不是 b = *a ?我无法理解: b = a , *b = a , b = * a , *b = *a 之间的区别。请给我一个简短的解释吗?
    • @user1386966:ab 是指针。 *a*b 是他们指向的东西。您想将a 指向的东西复制到b 指向的东西。因此你写*b = *ab = a 将指针 b 更改为与 a 具有相同的值,这是另一种说法,将 b 更改为指向 a 指向的相同事物。 b = *a*b = a 没有意义,因为你不能让结构等于指针。
    • 我通常的类比,顺便说一句,指针就像一张纸,上面写着街道地址。它指向的东西(又名“referand”)就像一座建筑物。您不会将建筑物(*b) 与上面写有建筑物地址的东西(b)混淆。*b = *a 的意思是“在b 的地址处建造建筑物,并使其与地址在a 上的建筑物。b = a 的意思是“将写在a 上的地址复制到b”。当你注意到在C 中你可以将指针指向a 时,这个类比稍微减弱了——甚至纸片在 C 中可以有自己的地址。
    • 谢谢,这有助于理解...学习 java 之后,C 似乎真的很棘手
    • 在 Java 中,您通常不需要考虑对象与当前值为该对象的变量之间的区别。但是区别还是有的,C中b = a*b = *a的区别和Java中x = yx.setTime(y.getTime())的区别一样,其中xy是@类型的变量987654353@。我使用 Date 作为示例只是因为它是我在 Java 库中能想到的最简单的可变对象类型。
    猜你喜欢
    • 2015-02-16
    • 2011-05-17
    • 2013-07-05
    • 2016-10-24
    • 1970-01-01
    • 2023-02-09
    • 2018-08-21
    • 2020-01-18
    相关资源
    最近更新 更多