C 更新数组中的指针不会';t更新原始指针

C 更新数组中的指针不会';t更新原始指针,c,arrays,pointers,struct,malloc,C,Arrays,Pointers,Struct,Malloc,我有一个球,它有一个相邻的球,如下面的代码所示。我面临的问题是更新存储在ball1的相邻中的Ball2值,而不是更新实际的Ball2 struct ball { struct ball * adjacent; size_t n_adjacent; }; // Setting ball 2 struct ball ball2 = { .n_adjacent= 0, .adjacent = NULL } ; // setting

我有一个球,它有一个相邻的球,如下面的代码所示。我面临的问题是更新存储在ball1的相邻中的Ball2值,而不是更新实际的Ball2

    struct ball {
      struct ball * adjacent;
      size_t n_adjacent;
    };


    // Setting ball 2
    struct ball ball2 = { .n_adjacent= 0, .adjacent = NULL } ;


    // setting ball 1
    struct ball ball1 =  { .n_adjacent= 1, .adjacent = NULL } ;

    // setting ball 1's adjacent 
    struct ball * ball1_adj = (struct ball*) calloc(1, sizeof(struct ball));
    ball1_adj[0] = ball2;

    ball1.adjacent = ball1_adj;

    printf("Address of original ball 2 is: %p\n", &ball2);
    printf("Address of ball 2 in the array is: %p\n", &(ball1.adjacent[0]));

    // different but Ok as malloc has returned a pointer

    ball1.adjacent[0].n_adjacent = 10;   // Updating ball 2 's adjacents

    printf("Adjacent of original ball 2 is: %d\n", ball2.n_adjacent); // prints 0
    printf("Adjacent of ball 2 in the array is: %d\n", (ball1.adjacent[0]).n_adjacent); // prints 10
    • ball2和ball1不是相邻[0]的同一个球(ball2)吗
    • 为什么ball2的值没有更新
  • 谢谢

    ball2和ball1不是相邻[0]的同一个球(ball2)吗

    不可以。您复制一份
    ball2
    并将其存储在
    ball1_adj[0]
    中,然后将该副本的地址分配给
    ball1。相邻的

    为什么ball2的值没有更新

    因为修改副本不会影响该副本的源。正如焚烧汽车照片不会损坏汽车一样

    如果要使用
    相邻的
    指针修改其他结构,则需要指定其他结构的地址,而不是副本:

    ball1.adjacent = ball1_adj;
    =>  ball1.adjacent = &ball2;
    

    请提供一个,其中包括结构定义和
    intmain(void)
    的定义。确保它编译并将输出包含在您的问题中。不要使用
    [0]
    取消引用指针,这不能很好地说明您在做什么。只需使用
    *
    (因此,如果您有
    类型*var
    ,您可以使用
    *var
    将其取消加密)我将如何分配3个球?对于给定的结构,您不能。您需要将指针替换为指针数组。