目前,我有一个结构camera
包含两个固定大小的变量f
和p
struct point {
double x, y, z;
};
struct camera {
struct point f[5], p[5];
};
使
f
和p
灵活导致错误。我按照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/