0
#include<stdio.h>

struct s {  
  char *a1;
  int a;
};

int main(){
struct   s p={"asdv",11};
struct   s p1=p;

p1.a1="vshaj";
printf("%d %s",p.a,p.a1);
}

在上面的程序中 p1.a1 和 p.a1 是否指向相同的内存地址?

4

2 回答 2

1

1) 结构 p1 是p的副本

2)但是 - 因为 a1 是一个指针,所以复制的指针都指向同一个内存。直到您将 p1.a1 重新分配给“vshaj”的地址。

3)永远不要在真实代码中做这样的事情;)

于 2013-07-09T23:17:14.303 回答
0

是的,他们会这样做,直到您重新分配p1.a1,然后他们当然不会。您可以将它们打印出来以证明这一点。

示例代码:

#include <stdio.h>

struct s
{
    char *a1;
    int a;
};

int main(void)
{
    struct s p = { "asdv", 11 };
    struct s p1 = p;

    printf("They're the same: %p %p\n", p.a1, p1.a1);

    p1.a1 = "vshaj";
    printf("%d %s\n",p.a,p.a1);

    printf("They're different: %p %p\n", p.a1, p1.a1);

    return 0;
}

示例运行:

$ make example
cc     example.c   -o example
$ ./example 
They're the same: 0x10e258f2a 0x10e258f2a
11 asdv
They're different: 0x10e258f2a 0x10e258f48
于 2013-07-09T23:16:58.117 回答