如何在C数组的任意点初始化多个结构?



我在C中有一个由

定义的结构

struct problem_spec_point {
int point_no;
double x;
double y;
int bc;
};

我有一个长度为6的结构体数组,其中前四个结构体在初始化时显式定义。

static struct point points[6] =
{
{0, 1, 2, 5},
{0, 1, 2, 6},
{0, 1, 2, 7},
{0, 1, 2, 8},
};

我可以稍后添加第5和第6结构:points[4] = (struct point) {0,1,2,12}; points[5] = (struct point) {3,3,3,3};但是假设我想同时添加这两个(或多个)连续的结构。就像

points[4] = {(struct point) {0,1,2,12}, (struct point) {3,3,3,3},};有这样的方法吗?

显然我尝试了上面列出的语法。

作为上下文,实际上我的代码有一个长度为3n+6的数组。我有一个for循环给前3n个结构赋值,但后6个结构有一个不同的,奇怪的模式。

for(int i = 0; i < 3n; i++)
{
point[i] = stuff;
}
//odd points here at end of array

我可以改变顺序并做一些索引更改:

static struct point points[3n+6] = 
{
last points first
}
for(int i = 6; i < 3n+6, i++
{
point[i]=stuff;
}

但是我不想。我对C不是很熟悉,但我很好奇。

这是我的第一个帖子,所以如果我没有按照正常的格式,请原谅我。

最好的方法可能就是用简单易懂的代码输入:

points[4] = (struct point) {0,1,2,12};
points[5] = (struct point) {3,3,3,3};

对于具有相同值等的大间隔,可以使用memcpy。也许是这样的:

#include <string.h>
void add_points (struct point* points, const struct point* val, size_t from, size_t to)
{
for(size_t i=from; i<=to; i++)
{
memcpy(&points[i], val, sizeof(struct points));
}
}

// usage example: assign {3,3,3,3} from index 4 to index 5
add_points(points, &(struct point){3,3,3,3}, 4, 5);

(这段代码可以通过使用restrict指针稍微优化一下。)

Lundin正确地告诉你可以使用memcpy。他没有明确提到你可以为不同的值重新制定你的尝试

points[4] = {(struct point) {0,1,2,12}, (struct point) {3,3,3,3},};

withmemcpylike

memcpy(points+4, (struct point []){ {0,1,2,12}, {3,3,3,3} },
sizeof (struct point [2]));

最新更新