C 更新数组中的指针不会';t更新原始指针
我有一个球,它有一个相邻的球,如下面的代码所示。我面临的问题是更新存储在ball1的相邻中的Ball2值,而不是更新实际的Ball2C 更新数组中的指针不会';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
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_adj[0]
中,然后将该副本的地址分配给ball1。相邻的
为什么ball2的值没有更新
因为修改副本不会影响该副本的源。正如焚烧汽车照片不会损坏汽车一样
如果要使用相邻的指针修改其他结构,则需要指定其他结构的地址,而不是副本:
ball1.adjacent = ball1_adj;
=> ball1.adjacent = &ball2;
请提供一个,其中包括结构定义和intmain(void)
的定义。确保它编译并将输出包含在您的问题中。不要使用[0]
取消引用指针,这不能很好地说明您在做什么。只需使用*
(因此,如果您有类型*var
,您可以使用*var
将其取消加密)我将如何分配3个球?对于给定的结构,您不能。您需要将指针替换为指针数组。