如何通过引用修改指向另一个结构内部的结构数组的指针

时间:2019-04-17 23:58:37

标签: c

我试图修改一个结构,该结构是一个函数中另一个结构内部的指针,然后使更改反映回该函数外部。

我将下面的代码简化为我遇到的确切问题。我了解到,在当前构造的函数内部,我正在修改x的值,而不是利用x的地址进行修改,但是我似乎无法全神贯注于如何正确地修改每个{{1} }。我尝试过

particle

b[0].p->x++; 函数中的for循环内,但这仅将test从1更改为5。

p[0]

运行#include <stdio.h> #include <stdlib.h> typedef struct { int x; } particle_t; typedef struct { int num_part; particle_t* p; } bins; void test (bins *b) { for (int i = 0; i < 4; i++) { b[0].p[i].x++; } } int main (int argc, char **argv) { particle_t *particles = (particle_t*) malloc (4 * sizeof(particle_t)); particles[0].x = 1; particles[1].x = 2; particles[2].x = 3; particles[3].x = 4; bins *b = (bins*) malloc (4 * sizeof(bins)); b[0].num_part = 1; b[0].p = (particle_t*) malloc (4 * sizeof(particle_t)); for (int i = 0; i < 4; i++) { b[0].p[i] = particles[i]; } test(b); printf("%d %d %d %d\n",particles[0].x,particles[1].x,particles[2].x,particles[3].x); return 0; } 函数后,我希望打印出test会得到2、3、4和5,但是我仍然收到1、2、3和4。

1 个答案:

答案 0 :(得分:2)

问题是您要为b [0] .p分配一个新数组,并将粒子数组复制到b [0] .p数组。您的函数将更改b [0] .p中的内存,而不更改粒子指向的内存。

代替malloc只是使b [0] .p数组指向粒子。

总结,更改

b[0].p = (particle_t*) malloc (4 * sizeof(particle_t));

b[0].p = particles;