Я пытаюсь изменить структуру, которая является указателем внутри другой структуры внутри функции, а затем отразить изменение обратно за пределами функции.
Я упростил мой код, приведенный ниже, именно к той проблеме, с которой я столкнулся. Я понимаю, что внутри моей функции, как она построена в настоящее время, я изменяю значение x, а не использую адрес x для изменения, но я не могу понять, как правильно изменять каждый particle
в массив. Я пытался
b[0].p->x++;
внутри цикла for в функции test
, но это только меняет p[0]
с 1 на 5.
#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
я ожидал, что распечатка particles[i].x
даст 2, 3, 4 и 5, но я все еще получаю 1, 2, 3 и 4.