将一个结构复制到另一个结构和更改一个结构的效果

Sha*_*ain 3 c c++ structure data-structures

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

输出是:

5 Jack
10 Jack
Run Code Online (Sandbox Code Playgroud)

这种变化应该仅在Y中,但这些变化也反映在X.如何?

我的问题是"当一个结构成员被复制时,如何改变另一个结构成员"?

oua*_*uah 5

strcpy(Y.p,t);
Run Code Online (Sandbox Code Playgroud)

Y.pvalue与值相同s.所以上面的函数调用实际上与:

strcpy(s, t);
Run Code Online (Sandbox Code Playgroud)


Car*_*rum 5

你初始化Y为副本X.这意味着它在p字段中包含相同的指针- 您没有改变它.

当你这样做的时候strcpy,你正在写下t翻的内容s.

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

  • 不,`Yp`和`Xp`有不同的地址.但它们是指针,它们都指向相同的地址.* (4认同)