目前,我有一个结构camera
,它包含两个固定大小的变量f
和p
struct point {
double x, y, z;
};
struct camera {
struct point f[5], p[5];
};
使f
和p
灵活会导致错误。我按照本 SO question 中给出的说明进行操作并决定使用非结构变量并将它们传递给函数,这导致了长函数调用语法和困惑的结构。
我的问题虽然主观,但是:拥有两个可通过一个点(类似于结构等)访问的灵活数组的最佳方法是什么?
最佳答案
采用非 灵活数组 方法后,IMO 通过一对更简洁的 struct point
指针解决了 OP 的“长函数调用语法和困惑结构”的更高级别问题.
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/