目前,我有一个结构camera包含两个固定大小的变量fp

struct point {
    double x, y, z;
};

struct camera {
    struct point f[5], p[5];
};

使fp灵活导致错误。我按照SO question中给出的说明操作,决定使用非结构变量并将它们传递给函数,结果导致函数调用语法过长,结构混乱。
我的问题,虽然主观,是:什么是最好的方法有两个灵活的数组,可以通过一个点访问(类似于结构等)?

最佳答案

一种非灵活的数组方法如下,IMO地址OP的“长函数调用语法和杂乱结构”的更高级别的问题与一个更干净的一对“cc>指针”。

struct camera {
    size_t size;  // add size member
    struct point *f;
    struct point *p;
};

bool camera_initialize(struct camera *cam, size_t size) {
  // Use 1 or 2 allocations
  cam->f = malloc(sizeof *(cam->f) * 2 * size);
  if (cam->f) {
    cam->p = cam->f + size;
    cam->size = size;
    return false; // success
  } else {
    cam->p = cam->f = NULL;
    cam->size = 0;
    return size > 0; // fail if size was not 0
  }
}

void camera_uninitialize(struct camera *cam) {
  free(cam->f);
  cam->p = cam->f = NULL;
  cam->size = 0;
}

示例用法
int main() {
  size_t n  = foo();
  struct camera cam;
  if (camera_initialize(&cam, n)) return EXIT_FAILURE;
  bar(cam.f, cam.n);
  bar(cam.p, cam.n);
  camera_uninitialize(&cam);
}

关于c - 模拟C结构中两个柔性数组的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42933471/

10-12 12:34
查看更多