【问题标题】:Copying one structure to another and Effect of changing one on Another将一个结构复制到另一个结构以及改变一个结构对另一个结构的影响
【发布时间】:2013-06-14 20:56:51
【问题描述】:
#include<stdio.h>
#include<string.h>
struct node
{
    int a;
    char *p;
};
int main()
{
    struct node X,Y;
    char s[5] = "Adam";
    char t[5] = "Jack";
    X.a = 5;
    X.p = s;
    Y = X;
    Y.a = 10;
    strcpy(Y.p,t);
    printf("%d %s\n",X.a,X.p);
    printf("%d %s\n",Y.a,Y.p);
    return 0;
}

在这个问题中,结构 X 具有“a=5”和“P 指向亚当”。然后将其复制到另一个结构 Y。并对 Y 进行更改。 但是当 strcpy(Y.p,t) 完成时。

输出是:

5 Jack
10 Jack

这种变化应该只在 Y 中,但这些变化也反映在 X 中。怎么会这样?

我的问题是“在复制一个结构成员时,更改一个结构成员对另一个结构成员有何影响”?

【问题讨论】:

  • 嗯,我认为这是个好问题。
  • 嗯,他们都指向同一个东西,然后你通过 strcpying 来改变同一个东西。
  • 甚至大约 37,000 多名用户对此感到困惑 :)

标签: c++ c data-structures structure


【解决方案1】:

您将Y 初始化为X 的副本。这意味着它在 p 字段中包含相同的指针 - 您从未更改过它。

当您执行strcpy 时,您将t 的内容写入s 之上。

你很幸运你选择了两个 4 字母的名字...

【讨论】:

  • 所以我可以说 Y.p 和 X.p 有相同的地址吗?
  • 不,Y.pX.p 有不同的地址。不过,它们是指针,并且它们都指向同一个地址。
  • 先生!是的,在改变 S 和 T.i 的大小时,我可以观察到过度的东西!谢谢你的回答!
【解决方案2】:
strcpy(Y.p,t);

Y.p 的值与s 的值相同。所以上面的函数调用其实是一样的:

strcpy(s, t);

【讨论】:

    【解决方案3】:

    这是因为结构 X 和 Y 的字符指针 p指向同一个内存位置

    所以 strcpy 改变了 X 和 Y 的数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多